Swift中的base64EncodedStringWithOptions因编译错误而失败

时间:2014-07-15 22:14:54

标签: ios swift base64

let dataStr = data.base64EncodedStringWithOptions(options: Encoding64CharacterLineLength)

不能使用“使用未解析的标识符'Encoding64CharacterLineLength'进行编译” 当我用

将参数更改为零时
let dataStr = data.base64EncodedStringWithOptions(options: 0)

它给出了更奇怪的错误:“无法转换'String'类型的表达式!键入'String!'“我找到了一种使用NSData初始化NSString的方法(但是,我仍然无法区分String和NSString),但我真的好奇为什么这两行代码不起作用。

7 个答案:

答案 0 :(得分:31)

除非明确给出外部名称,否则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: [])

答案 1 :(得分:19)

对于Swift 2.x,使用数组作为选项:

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

答案 2 :(得分:5)

对于swift 3.0,请使用

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

答案 3 :(得分:2)

Swift 3.x

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

答案 4 :(得分:0)

您不必在参数中输入“options:”标识符。您必须指定Encoding64CharacterLineLength是NSDataBase64EncodingOptions的静态成员,如下所示:

var dataStr = data.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength)

答案 5 :(得分:0)

let dataStr = data.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.allZeros)

答案 6 :(得分:0)

由于默认参数值设置为空数组,所以

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