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()