如何使用map方法重构两个for循环

时间:2018-08-03 15:09:43

标签: swift for-loop refactoring

我正在使用swiftyjson库,并编写了此代码来检索urlImage。

    for (_, value) in json["assets"] {
        for item in value.arrayValue {
            let urlImage = item["urlImage"].stringValue
        }
    }

我想使用平面方法进行重构。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

这是使用flatMapmap的方式。由于必须遍历两个数组,因此两个映射是必需的。如果$0的名称不是{ arg in的形式,则它是闭包中的标准参数名称。

let urlImages: [String] = jsonObject["assets"].arrayValue.flatMap{
    $0.arrayValue.map{ $0["urlImage"].stringValue }
}

并过滤掉空的urlImages:

let z: [String] = jsonObject["assets"].flatMap{
    $1.compactMap{
        let urlImage = $1["urlImage"].stringValue
        return urlImage == "" ? nil : urlImage
    }
}

let z2: [String] = jsonObject["assets"].flatMap{
    $1.compactMap{ $1["urlImage"].stringValue }.filter{ $0 != "" }
}

答案 1 :(得分:1)

简单:

let urlImageArray = json["assets"].map{$1}.map{$0["urlImage"].stringValue}