base64EncodedStringWithOptions in Swift fails with compile error

base64, ios, swift

Solution

Unless explicitly given an external name, first argument of a method in Swift is not a named argument. Therefore you should be doing: `data.base64EncodedStringWithOptions(x)` without the `options:` part.

If you actually look at the argument type, `NSDataBase64EncodingOptions`, you'll notice that it is a struct conforming to `RawOptionSet` with static variables for option constants. Therefore to use them you should do: `NSDataBase64EncodingOptions.Encoding64CharacterLineLength`

The `NSDataBase64EncodingOptions` struct (or `RawOptionSet` in general) is also not convertible from integer literals (like `0`). But it does conform to `NilLiteralConvertible` so if you don't want any options you can pass `nil`.

Putting it together:

let dataStr = data.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength)

or

let dataStr = data.base64EncodedStringWithOptions(nil)

Swift3.0

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

Problem

``` let dataStr = data.base64EncodedStringWithOptions(options: Encoding64CharacterLineLength) ``` Doesn't compile with "Use of unresolved identifier 'Encoding64CharacterLineLength'" When I just change the param to zero with ``` let dataStr = data.base64EncodedStringWithOptions(options: 0) ``` It gives even stranger error: "Cannot convert the expression of type 'String!' to type 'String!'" I found a way to init NSString with NSData (however, I still can't get the difference between String and NSString), but I'm really curious why these two lines of code don't work.

Original source