Как получить массив строковых элементов с помощью SwiftyJSON?

У меня есть JSON, который может содержать массив строковых элементов, и я хочу сохранить его в переменной. До сих пор я сделал:

import SwiftyJSON    
(...)
var myUsers = [""]
if(json["arrayOfUsers"].string != nil)
{
    myUsers = json["arrayOfUsers"] //this brings an error
}

Ошибка говорит:

не может индексировать значение типа JSON индексом строки типа

Как я могу безопасно передать этот массив в свою переменную?


person user3766930    schedule 07.04.2016    source источник
comment
Вы проверяете, что json["arrayOfUsers"] является строкой, а затем пытаетесь присвоить этот объект массиву строк - это не сработает. Скажите, пожалуйста, что такое json["arrayOfUsers"], это строка или массив?   -  person Eric Aya    schedule 07.04.2016
comment
Это массив строк, что-то вроде ["5523533","5gdsgdse","5gdsgsdb9","5432523d"]   -  person user3766930    schedule 07.04.2016
comment
@zcui93 zcui93 Я написал myUsers = json["arrayOfUsers"].array, но потом получаю сообщение об ошибке cannot assign value of type [JSON] to type [String]   -  person user3766930    schedule 07.04.2016
comment
Это потому, что вы объявили myUsers [""] АКА [String]   -  person zcui93    schedule 07.04.2016


Ответы (1)


Вы должны получить массив строк, который SwiftyJSON подготовил при анализе ваших данных JSON.

Я буду использовать if let, а не != nil, как вы делаете в своем вопросе, и мы собираемся использовать дополнительный геттер SwiftyJSON .array:

if let users = json["arrayOfUsers"].array {
    myUsers = users
}

Если по какой-либо причине вы получаете ошибку типа, вы можете явно понизить сам объект SwiftyJSON вместо использования геттера:

if let users = json["arrayOfUsers"] as? [String] {
    myUsers = users
}

Обратите внимание, что ваш массив строк также не создан должным образом. Делайте так:

var myUsers = [String]()

или как хиты:

var myUsers: [String] = []

Обе версии одинаково допустимы и обе создают пустой массив строк.

person Eric Aya    schedule 07.04.2016
comment
Хорошо, еще один вопрос - в таком случае как быть с объявлением myUsers? Как я должен объявить это? var myUsers = [""] вызывает ошибку несоответствия типов :( - person user3766930; 07.04.2016
comment
Хм, это очень странно, я получаю эту ошибку после этих изменений: imgur.com/RU70gLo Что может быть здесь не так? - person user3766930; 07.04.2016
comment
Попробуйте мое второе решение в ответе, с опущенным вниз. - person Eric Aya; 07.04.2016
comment
:) Теперь он подчеркивает это: json["array... и говорит Ambiguous reference to member subscript :| - person user3766930; 07.04.2016
comment
Я только что отредактировал ответ. Попробуйте без .array, но с понижением. Извините, мой плохой, я писал слишком быстро раньше. - person Eric Aya; 07.04.2016
comment
Спасибо за терпеливость! Я сделал то, что вы предложили (без .array и с кастингом), но потом получил предупреждение о том, что Cast from 'JSON' to unrelated type [String] always fails.. Я думаю, это плохой знак, не так ли? - person user3766930; 07.04.2016
comment
Что-то действительно подозрительно. С моим первым решением вы должны получить либо [AnyObject], либо [String], но не [JSON], а со вторым вы должны получить [String], иначе оно должно дать сбой, оно не должно жаловаться, как это происходит... :/ - person Eric Aya; 07.04.2016
comment
это действительно выглядит подозрительно, особенно потому, что весь код теперь отлично работает, появляется предупреждение, но это все. Думаю оставить как есть. - person user3766930; 07.04.2016