使用 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 快速获取字典的所有值并传递给视图控制器的主要内容,如果未能解决你的问题,请参考以下文章
获取键及其值并有效地将其从 Dictionary<string,value> 中删除