在 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 上使用地图的主要内容,如果未能解决你的问题,请参考以下文章

JSON数据,编辑方式

Foundation框架中的动态字典

如何在 iOS 中获取音频文件的持续时间?

使用地图创建开放图故事 - iOS

无法在表视图中列出数据 [关闭]

将 json 解析为 NSDictionary [关闭]