Swift中的base64EncodedStringWithOptions失败并出现编译错误

let dataStr = data.base64EncodedStringWithOptions(options: Encoding64CharacterLineLength) 

不使用“使用未parsing的标识符Encoding64CharacterLineLength”编译当我只是将参数更改为零

 let dataStr = data.base64EncodedStringWithOptions(options: 0) 

它给出了更奇怪的错误:“不能转换types'string!'的expression式 键入'string!'“我发现一种方法来初始化NSString NSData(但是,我仍然无法区分string和NSString之间的区别),但我真的很好奇,为什么这两行代码不起作用。

除非明确给出外部名字,否则Swift中的方法的第一个参数不是命名参数。 因此,你应该做的: data.base64EncodedStringWithOptions(x)没有options:部分。

如果你真的看到参数types, NSDataBase64EncodingOptions ,你会注意到它是一个符合RawOptionSet结构的选项常量的静态variables。 因此,使用它们你应该这样做: 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: []) 

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

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

对于swift 3.0使用这个,

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

Swift 3.x

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

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

 var dataStr = data.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength) 
 let dataStr = data.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.allZeros)