Base64EncodedStringWithOptions в Swift с ошибкой компиляции

let dataStr = data.base64EncodedStringWithOptions(options: Encoding64CharacterLineLength)

Не компилируется с помощью "Использование неразрешенного идентификатора" Encoding64CharacterLineLength " Когда я просто изменяю параметр до нуля с помощью

let dataStr = data.base64EncodedStringWithOptions(options: 0)

Он дает еще более странную ошибку: "Невозможно преобразовать выражение типа" String! "для ввода" String! "" Я нашел способ инициализировать NSString с NSData (однако, я все еще не могу получить разницу между String и NSString), но мне действительно интересно, почему эти две строки кода не работают.

Ответы

Ответ 1

Если явно не указано внешнее имя, первый аргумент метода в Swift не является именованным аргументом. Поэтому вы должны делать: data.base64EncodedStringWithOptions(x) без части options:.

Если вы действительно посмотрите на тип аргумента, NSDataBase64EncodingOptions, вы заметите, что это структура, соответствующая RawOptionSet со статическими переменными для констант опций. Поэтому для их использования вы должны: NSDataBase64EncodingOptions.Encoding64CharacterLineLength

Структура NSDataBase64EncodingOptions (или RawOptionSet в целом) также не конвертируется из целых литералов (например, 0). Но он соответствует NilLiteralConvertible, поэтому, если вам не нужны какие-либо опции, вы можете пройти nil.

Объединяя это:

let dataStr = data.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength)

или

let dataStr = data.base64EncodedStringWithOptions(nil)

Swift3.0

let dataStr = data.base64EncodedString(options: [])

Ответ 2

Для Swift 2.x используйте массив для параметров:

let dataStr = data.base64EncodedStringWithOptions([.Encoding64CharacterLineLength])
let dataStr = data.base64EncodedStringWithOptions([])

Ответ 3

Для swift 3.0 используйте это,

var dataStr = data.base64EncodedString(options: .lineLength64Characters)

Ответ 4

Swift 3.x

let fileStream = fileData?.base64EncodedString(options: NSData.Base64EncodingOptions.init(rawValue: 0))

Ответ 5

Вам не нужно указывать в аргументе идентификатор "options:". Вы должны указать, что Encoding64CharacterLineLength является статическим членом NSDataBase64EncodingOptions, например:

var dataStr = data.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength)

Ответ 6

let dataStr = data.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.allZeros)

Ответ 7

Так как значение параметра по умолчанию установлено как пустой массив…

/// Returns a Base-64 encoded string.
///
/// - parameter options: The options to use for the encoding. Default value is '[]'.
/// - returns: The Base-64 encoded string.
@inlinable public func base64EncodedString(options: Data.Base64EncodingOptions = []) -> String

вам просто нужно позвонить

let dataStr = data.base64EncodedString()