2014-10-08 103 views
1

我在操場這種非常簡單的短代碼:斯威夫特遊樂場不承認可可觸摸初始化

import Foundation 
let data = NSData(base64EncodedString: "key", options: kNilOptions) 

但操場不喜歡它,並認爲我想用init(bytes:length:)。那裏有什麼問題?

編輯:

只是爲了澄清,顯示的問題是:

Playground execution failed: <EXPR>:13:18: error: incorrect argument labels in call 
(have 'base64EncodedString:options:', expected 'bytes:length:') 
let data = NSData(base64EncodedString: "key", options: kNilOptions) 
      ^~~~~~~~~~~~~~~~~~~~   ~~~~~~~ 
       bytes      length 
+0

您要創建非編碼字符串,因此應用程序崩潰數據檢索反向字符串。 – Sandeep 2014-10-08 11:21:35

回答

4

NSDataBase64DecodingOptionsRawOptionSetTypeNilLiteralConvertible繼承,因此,你可以爲 「無選擇」 指定nil

let data = NSData(base64EncodedString: "SGVsbG8gd29ybGQNCg==", options: nil) 

更新:自Swift 2起, NS_OPTIONS類型被導入爲符合OptionSetType協議,該協議爲選項提供了一組類似的界面。可以將「無選項」指定爲空集:

let data = NSData(base64EncodedString: "SGVsbG8gd29ybGQNCg==", options: []) 
+0

謝謝,錯過了。被用於Objective-C風格的選項 – DeFrenZ 2014-10-08 11:26:39

+0

@DavideDeFranceschi:是的,令人困惑的是Swift中的'nil'可以表示「標量」而不一定是指針。順便說一句。在其他答案中指出的「options:.allZeros」也可以工作,因爲'RawOptionSetType'也繼承自'BitwiseOperationsType'。 – 2014-10-08 11:30:18

1

該方法用於從base64編碼的字符串中創建明文數據。所以,這個方法不接受utf-8或ascii編碼的字符串。

let encodedData = "key".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true) 

let base64EncodedString = encodedData?.base64EncodedStringWithOptions(.allZeros) 


let data = NSData(base64EncodedString: base64EncodedString!, options:.allZeros) 

//你可以使用

let originalString = String(NSString(data: theData, encoding: NSUTF8StringEncoding)) 

println(originalString) 
+0

我只用''key「'字符串作爲例子,問題出在編譯本身 – DeFrenZ 2014-10-08 11:26:18

+1

(你可以縮寫爲'options:.allZeros'。) – 2014-10-08 11:30:47