Как использовать contains в объекте swiftyJSON

Я пытаюсь использовать contains в swift, чтобы найти значение в массиве, однако, когда я использую переменную в качестве предиката, я получаю «Строка не может быть преобразована в S.Generator.Element».

Может ли кто-нибудь объяснить, что это значит и почему это происходит?

Это исходный JSON, загруженный и проанализированный с помощью swiftyJSON:

{ "праздники" : [ "01.01.2015", "01.12.2015", "03.03.2015", "04.02.2014", "04.03.2015", "05.01. /2015", "18.05.2015", "06.08.2015", "15.06.2015", "29.06.2015", "20.07.2015", "17.08.2015 ", "10.12.2015", "11.02.2015", "11.06.2015", "12.08.2015", "12.05.2015", "01.02.2016" ] }

Это работает

var haystack:Array<JSON> = jsonData["holidays"].arrayValue
if(contains(haystack, "01/01/2015")) {
    return true
}

Это не работает:

var haystack:Array<JSON> = jsonData["holidays"].arrayValue
var needle:String = "01/01/2015"
if(contains(haystack, needle)) {
    return true
}

person afterxleep    schedule 29.12.2014    source источник


Ответы (2)


Вместо вызова arrayValue попробуйте object:

if let haystack = jsonData["holidays"].object as? [String] {
    let needle = "01/01/2015"
    if contains(haystack, needle) {
        return true
    }
}
person Jeffery Thomas    schedule 29.12.2014
comment
Это работает, спасибо! Я предполагал, что arrayValue вернет массив типа [String]. Но кажется, что нет. Когда тогда вам следует использовать arrayValue или DictionaryValue? - person afterxleep; 30.12.2014
comment
@afterxleep arrayValue возвращает [JSON]: в частности, возвращает map(self.object as [AnyObject]){ JSON($0) }. - person Jeffery Thomas; 30.12.2014

Ваш код должен работать нормально, см. изображение ниже, и, возможно, ваш тип массива должен быть Array<String>.

введите здесь описание изображения

person Marius Fanu    schedule 29.12.2014
comment
Да, это работает, однако исходный массив загружается из файла с использованием swiftyJSON, поэтому я объявляю его как Array‹JSON›, который является объектом JSON, возвращаемым из swiftyJSON после синтаксического анализа. Когда это так, это не работает. - person afterxleep; 30.12.2014