2015-07-31 2 views
1

Что не так с этим фрагментом кода (который был вдохновлен примером this)? В настоящее время он печатает строку JSON "(<5b5d>, 4)" вместо ожидаемого "[]".Невозможно преобразовать пустой массив массивов в JSON с Swift 2

var tags: [[String]] = [] 
// tags to be added later ... 
do { 
    let data = try NSJSONSerialization.dataWithJSONObject(tags, options: []) 
    let json = String(data: data, encoding: NSUTF8StringEncoding) 
    print("\(json)") 
} 
catch { 
    fatalError("\(error)") 
} 

ответ

4

Короткий ответ: Создание данных JSON является правильным. Проблема находится в преобразования данных в строке, что вы хотите, это NSString метод:

let json = NSString(data: data, encoding: NSUTF8StringEncoding) as! String 

который производит ожидаемый [].

Слегка развернутый ответ: Вашего код

let json = String(data: data, encoding: NSUTF8StringEncoding) 

вызывает метод String инициализации

/// Initialize `self` with the textual representation of `instance`. 
/// ... 
init<T>(_ instance: T) 

и результат является текстовым представлением кортежа (data: data, encoding: NSUTF8StringEncoding):

(<5b5d>, 4) 

На самом деле вы можете вызвать String() с произвольными параметрами

let s = String(foo: 1, bar: "baz") 
print(s) // (1, "baz") 

в Swift 2. Это не компилировать в Swift 1.2, так что я не уверен, что если это намеренно или нет. Я отправил вопрос в компании Apple Developer Форум о том, что:

+0

Какой «мост»! :) Спасибо. – Drux

+0

Абсолютно блестящий. Во всяком случае, вы только конвертируете данные JSON в строку для отладки. – gnasher729

+0

И я не нашел никакой гарантии, что данные JSON будут закодированы в кодировке UTF-8. – gnasher729

Смежные вопросы