使用 almaofire 快速获取字典的所有值并传递给视图控制器

Posted

技术标签:

【中文标题】使用 almaofire 快速获取字典的所有值并传递给视图控制器【英文标题】:swift getting all values of a dictionary and passing to viewcontroller using almaofire 【发布时间】:2018-05-26 21:52:48 【问题描述】:

您有一个从 api 收集数据的应用程序,我使用 Alamofire 和 swiftyJSON。我现在面临的当前挑战是我在一个数组中有不同的字典,我希望能够返回字典中的特定项目。这是我正在使用的数组

Json

[
    
        "images": [
            
                "id": 8,
                "original": "http://127.0.0.1:8000/media/images/products/2018/05/f3.jpg",
                "caption": "",
                "display_order": 0,
                "date_created": "2018-05-26T17:24:34.762848Z",
                "product": 13
            ,
            
                "id": 9,
                "original": "http://127.0.0.1:8000/media/images/products/2018/05/f5.jpg",
                "caption": "",
                "display_order": 1,
                "date_created": "2018-05-26T17:24:34.815214Z",
                "product": 13
            ,
            
                "id": 10,
                "original": "http://127.0.0.1:8000/media/images/products/2018/05/f2.jpg",
                "caption": "",
                "display_order": 2,
                "date_created": "2018-05-26T17:25:19.117271Z",
                "product": 13
            ,
            
                "id": 11,
                "original": "http://127.0.0.1:8000/media/images/products/2018/05/f4.jpg",
                "caption": "",
                "display_order": 3,
                "date_created": "2018-05-26T17:25:19.155159Z",
                "product": 13
            
        ]
    
]

获取单张图片是这样的

Alamofire.request(URL, method: .get, parameters: nil, encoding: JSONEncoding.default, headers: HEADER).responseJSON  (response) in

        if response.result.error == nil 

            guard let data = response.data else return
            do 

                if let json = try JSON(data: data).array 
                    for item in json 

 let images = item["images"][0]["original"].stringValue


 ....

这仅返回索引图像。[0]如果设置为 [1],则返回索引为 1 的图像。

如何返回所有图像,以便我可以遍历所有图像并显示在集合视图控制器中。更多代码将根据要求提供。

【问题讨论】:

【参考方案1】:

你可以这样编辑:

if let json = try? JSON(data: data).arrayValue 


        for item in json 
            let imagesList = item["images"].arrayValue

            let imagesURL = imagesList.map $0["original"].string.compactMap($0)
             if imagesURL.count > 0
                print( imagesURL[0])
            


        
    

或者:

do 
            let json  = try JSON(data: data).array

            json?.forEach( (item) in
                let imagesList = item["images"].arrayValue

                let imagesURL = imagesList.map $0["original"].string.compactMap($0)
                  if imagesURL.count > 0
                print( imagesURL[0])
                
            )
   catch  
          print(error.localizedDescription)

【讨论】:

错误Value of type '[String?]' has no member 'compactMap' 确保您编写正确的代码let imagesURL = imagesList.map $0["original"].string.compactMap($0) 如果你想删除紧凑型地图,请删除这个.compactMap($0) 我删除了 .compactMap(0) 并且它可以工作,但是我现在如何从返回的图像数组中选择一个指定的图像? 你现在需要imagesURL[String?]字符串数组

以上是关于使用 almaofire 快速获取字典的所有值并传递给视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

js怎么获取checkbox的值并传到action那

三种方式获取小程序页面跳转并传参

获取键及其值并有效地将其从 Dictionary<string,value> 中删除

如何使用 Bootstrap Multiselect 获取所有选定的值并在 AJAX 中使用它

在php数组中搜索值并获取所有键

如何获取 <pre> 标记的值并保留所有空格?