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

Mik*_*nov 18 base64 ios swift

let dataStr = data.base64EncodedStringWithOptions(options: Encoding64CharacterLineLength)
Run Code Online (Sandbox Code Playgroud)

不使用"使用未解析的标识符编译'Encoding64CharacterLineLength'进行编译"当我只是将参数更改为零时

let dataStr = data.base64EncodedStringWithOptions(options: 0)
Run Code Online (Sandbox Code Playgroud)

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

sla*_*zyk 31

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

如果您实际查看参数类型,NSDataBase64EncodingOptions您会注意到它是一个符合RawOptionSet选项常量的静态变量的结构.因此,要使用它们,您应该:NSDataBase64EncodingOptions.Encoding64CharacterLineLength

所述NSDataBase64EncodingOptions结构(或RawOptionSet一般的)也是从整数常量(如不可兑换0).但NilLiteralConvertible如果您不想要任何可以通过的选项,它确实符合要求nil.

把它放在一起:

let dataStr = data.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength)
Run Code Online (Sandbox Code Playgroud)

要么

let dataStr = data.base64EncodedStringWithOptions(nil)
Run Code Online (Sandbox Code Playgroud)

Swift3.0

let dataStr = data.base64EncodedString(options: [])
Run Code Online (Sandbox Code Playgroud)

  • 看起来像Xcode 7 beta 4传递nil不再编译.文档说"使用以下零或一个......"但是传递0也不能编译.对我来说有用的是`NSDataBase64EncodingOptions(rawValue:0)`如果你不想使用任何选项 (11认同)
  • 对于Swift 2.x使用:`let dataStr = data.base64EncodedStringWithOptions([])`通常,选项现在可以作为数组提供. (6认同)

zap*_*aph 19

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

let dataStr = data.base64EncodedStringWithOptions([.Encoding64CharacterLineLength])
let dataStr = data.base64EncodedStringWithOptions([])
Run Code Online (Sandbox Code Playgroud)


Kir*_*air 5

对于swift 3.0使用这个,

var dataStr = data.base64EncodedString(options: .lineLength64Characters)
Run Code Online (Sandbox Code Playgroud)