2014-10-08 3 views
1

У меня это очень простой и короткий код в детскую площадку:Swift площадка не признает Cocoa Touch инициализатору

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

но площадка не нравится, и думает, что я хотел использовать init(bytes:length:). Что там не так?

EDIT:

Просто чтобы прояснить этот вопрос показан:

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

ответ

4

NSDataBase64DecodingOptions является RawOptionSetType, который наследует от NilLiteralConvertible, поэтому вы можете указать nil для "без вариантов":

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

Обновление: от Swift 2, Типы NS_OPTIONS импортируются в соответствии с протоколом OptionSetType, который представляет собой наборный интерфейс для параметров. «Без параметров» можно указать как пустой набор:

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

Спасибо, пропустили это. Был использован для опций стиля Objective-C – DeFrenZ

+0

@DavideDeFranceschi: Да, это путано, что 'nil' в Swift может обозначать что-то« скалярное »и необязательно указатель. Btw. 'options: .allZeros', как указано в другом ответе, также будет работать, потому что' RawOptionSetType' также наследуется от 'BitwiseOperationsType'. –

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

+1

(Вы можете сократить это до' options: .allZeros'.) –