首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift:将JSON字符串移动到数组的速记方法

Swift:将JSON字符串移动到数组的速记方法
EN

Stack Overflow用户
提问于 2015-02-06 14:19:17
回答 3查看 95关注 0票数 1

我有一个项目,我必须从一个JSON对象中获取一堆Logo和Title's,然后我使用Alamofire和SwiftyJSON提取这些信息,如下所示:

代码语言:javascript
复制
    Alamofire.request(.POST, postJsonURL, parameters: postParameters, encoding: .JSON).responseJSON {
        (request, response, json, error) -> Void in
        if (json != nil) {
            var jsonObj = JSON(json!)
            var title1 = jsonObj[0]["title"].stringValue
            var title2 = jsonObj[1]["title"].stringValue
            var title3 = jsonObj[2]["title"].stringValue
            var title4 = jsonObj[3]["title"].stringValue
            var title5 = jsonObj[4]["title"].stringValue
            var image1 = jsonObj[0]["logoURL"].stringValue
            var image2 = jsonObj[1]["logoURL"].stringValue
            var image3 = jsonObj[2]["logoURL"].stringValue
            var image4 = jsonObj[3]["logoURL"].stringValue
            var image5 = jsonObj[4]["logoURL"].stringValue
            self.images = [image1, image2, image3, image4, image5]
            self.titles = [title1, title2, title3, title4, title5]
        }
    }

这在一分钟内起作用,但这让我发疯了,因为这是对枯燥原则的极大漠视,如果我需要的话,通过乏味的打字来改变它需要花费很长时间。我只是想知道什么是一个好的方法来重构这个,因为我已经没有想法了。提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-02-06 14:30:51

只需使用循环:

代码语言:javascript
复制
   Alamofire.request(.POST, postJsonURL, parameters: postParameters, encoding: .JSON).responseJSON {
        (request, response, json, error) -> Void in
        if (json != nil) {
            var jsonObj = JSON(json!)
            self.images = []
            self.titles = []

            for (var i=0; i < 5; ++i) {
                self.images.append(jsonObj[i]["logoURL"].stringValue)
                self.titles.append(jsonObj[i]["title"].stringValue)
            }
        }
    }
票数 2
EN

Stack Overflow用户

发布于 2015-02-06 14:33:38

如果要收集所有(而不是0...4)元素,只需迭代jsonObj

代码语言:javascript
复制
var jsonObj = JSON(json!)
var images:[String]
var titles:[String]
for (idx, obj) in jsonObj {
    titles.append(obj["title"].stringValue)
    images.append(obj["logoURL"].stringValue)
}
self.images = images
self.titles = titles
票数 2
EN

Stack Overflow用户

发布于 2015-02-06 14:25:07

您可以在以下任务中使用reduce:

代码语言:javascript
复制
var titles = jsonObj.reduce([] as [String]) {
    p, n in
    var temp = p
    temp.append(n["title"]!)
    return temp
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28367790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档