【问题标题】:How to use contains on a swiftyJSON object如何在 swiftyJSON 对象上使用 contains
【发布时间】:2015-02-26 02:28:51
【问题描述】:

我试图在 swift 中使用 contains 来查找数组上的值,但是当我使用变量作为谓词时,我得到一个 'String is not convertible to 'S.Generator.Element'。

谁能解释这意味着什么以及为什么会发生?

这是原始 JSON,使用 swiftyJSON 加载和解析:

{ “假期”:[ “2015 年 1 月 1 日”, “2015 年 12 月 1 日”, "23/03/2015", “2014 年 2 月 4 日”, “2015 年 3 月 4 日”, “2015 年 1 月 5 日”, “2015 年 5 月 18 日”, “2015 年 8 月 6 日”, “2015 年 6 月 15 日”, “2015 年 6 月 29 日”, “2015 年 7 月 20 日”, “2015 年 8 月 17 日”, “2015 年 12 月 10 日”, “2015 年 2 月 11 日”, “2015 年 16 月 11 日”, “2015 年 8 月 12 日”, "25/12/2015", “2016 年 2 月 1 日” ] }

这行得通

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
}

【问题讨论】:

    标签: swift contains swifty-json


    【解决方案1】:

    不要调用arrayValue,而是尝试object

    if let haystack = jsonData["holidays"].object as? [String] {
        let needle = "01/01/2015"
        if contains(haystack, needle) {
            return true
        }
    }
    

    【讨论】:

    • 它有效,谢谢!我假设 arrayValue 会返回一个类似 [String] 的数组。但似乎没有。那么什么时候应该使用 arrayValue 或 dictionaryValue 呢?
    • @afterxleep arrayValue 返回[JSON]:特别是返回map(self.object as [AnyObject]){ JSON($0) }
    【解决方案2】:

    您的代码应该可以正常运行,请参见下图,并且您的数组类型可能应该是 Array&lt;String&gt;

    【讨论】:

    • 是的,这行得通,但是原始数组是使用 swiftyJSON 从文件中加载的,这就是为什么我将其声明为 Array ,它是解析后从 swiftyJSON 返回的 JSON 对象。在这种情况下,它不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-07
    • 2019-06-03
    • 2015-10-18
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    • 2015-08-06
    相关资源
    最近更新 更多