在 NSDictionary 上使用地图
Posted
技术标签:
【中文标题】在 NSDictionary 上使用地图【英文标题】:Using map on NSDictionary 【发布时间】:2015-06-20 17:20:53 【问题描述】:设置
我正在使用我的 API 从我的服务器加载数据 返回的数据是 JSON 格式 API 提供的 JSON 如下图所示 我使用 ALAMOFIRE 从 API 接收数据并解析 JSON 响应JSON
data: [
owner: "FREDL",
street: "Apothekergasse 1",
latitude: "48.261900",
longitude: "11.445200"
],
meta: "Testmeta"
AED 类
class AED: NSObject
let owner: String
let street: String
let mapType: String
let coordinate: CLLocationCoordinate2D
init(owner: String, street: String, mapType: String, coordinate: CLLocationCoordinate2D)
self.owner = owner
self.street = street
self.mapType = mapType
self.coordinate = coordinate
super.init()
问题
我想对结果项使用map
函数,为API 提供的每个结果创建一个AED
对象。
func getAvailableAEDsInRange(#latitude: Float, longitude: Float)
Alamofire.request(MFNetworkController.Router.getAEDInRange(latitude: latitude, longitude: longitude)).responseJSON()
(_, _, JSON, error) in
if error == nil
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0))
let aedInfo = ((JSON as! NSDictionary).valueForKey("data") as! [NSDictionary])
aedInfo.map()
(...)
println(aedInfo)
错误信息
Cannot invoke 'map' with an argument list of type '((_) -> _)'
问题
-
当我提供结果字典并通过
$0["owner"]
访问参数时,为什么会出现此错误消息?
当我使用例如println($0["owner"]
时,我得到一个结果并且错误消失了。那么为什么可以访问呢?
更新
如上所示,我更改了问题功能。当我将代码拆分为:
let aedInfo = ((JSON as! NSDictionary).valueForKey("data") as! [NSDictionary])
和
aedInfo.map()
然后我已经收到错误消息:
Cannot invoke 'map' with an argument list of type '((_) -> _)'
aedInfo 的输出是:
[
latitude = "48.261900";
longitude = "11.445200";
owner = FREDL;
street = "Apothekergasse 1";
]
正如我所料,这是字典数组。但是为什么map函数会返回错误呢?
更新 2
我在 Ray Wenderlich 身上找到了一个例子,他也采用了同样的方法。但是没有错误。那么区别在哪里呢?
// 3 Alamofire.request(Five100px.Router.PopularPhotos(self.currentPage)).responseJSON() (_, _, JSON, 错误) in
if error == nil
// 4
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0))
// 5, 6, 7
let photoInfos = ((JSON as! NSDictionary).valueForKey("photos") as! [NSDictionary]).filter( ($0["nsfw"] as! Bool) == false ).map PhotoInfo(id: $0["id"] as! Int, url: $0["image_url"] as! String)
// 8
let lastItem = self.photos.count
// 9
self.photos.addObjectsFromArray(photoInfos)
// 10
let indexPaths = (lastItem..<self.photos.count).map NSIndexPath(forItem: $0, inSection: 0)
// 11
dispatch_async(dispatch_get_main_queue())
self.collectionView!.insertItemsAtIndexPaths(indexPaths)
self.currentPage++
self.populatingPhotos = false
【问题讨论】:
你不能在字典上使用地图,但我认为你可以在字典属性'values'上使用 但我想我在 values 属性上使用了它。通过使用“valueForKey”? 'CLLocationCoordinate2DMake(latitude, longitude) as!浮动'? 谢谢。这当然也是一个错误......但这与我认为的另一个问题无关? 我正在与Version 6.3.2 (6D2105)
合作
【参考方案1】:
Xcode 不能相信它在 Swift 中出错的原因,但你可以相信它会在正确的位置指出它:)
CLLocationCoordinate2dMake() as! Float
会产生错误。因为您不能将结构转换为数字。
删除as! Float
,您的错误就会消失。
【讨论】:
您好,非常感谢。它现在工作得很好。感谢您对仲裁的支持!以上是关于在 NSDictionary 上使用地图的主要内容,如果未能解决你的问题,请参考以下文章