【问题标题】:Acessing dictionary inside dictionary and assigning it to a variable访问字典内的字典并将其分配给变量
【发布时间】:2018-08-03 16:51:51
【问题描述】:

我正在尝试使用字典来存储有关港口的信息,它可以在字典中没有“[]”的情况下工作,但是当我尝试在内部存储更多信息并尝试获取坐标和其他信息时,它会失败我。

let dict = [
        "Holmsbu": ["cord":CLLocationCoordinate2DMake(59.5, 10.4)],
        "Kragerø": ["cord":CLLocationCoordinate2DMake(59.1, 10.4)],
        "Risør": ["cord":CLLocationCoordinate2DMake(59.2, 10.4)],
        "Strömstad": ["cord":CLLocationCoordinate2DMake(59.3, 10.4)]]
    
    for havner in dict {
        map.setRegion(MKCoordinateRegionMake(havner.value, MKCoordinateSpan(latitudeDelta: 0.1, longitudeDelta: 0.1)), animated: true)
        let mk = MKPointAnnotation()
        mk.coordinate = havner.value
        mk.title = havner.key
        map.addAnnotation(mk)
        }
    }

我正在尝试这样做

 let dict = ["Holmsbu": ["cord":CLLocationCoordinate2DMake(59.5, 10.4), "power": "yes", "description":"DESCRIPTION HERE"]

然后像这样访问字典的描述部分:

mk.subtitle = havner.description

错误:

无法将 '[String : CLLocationCoordinate2D]' 类型的值转换为预期的 arg

无法将类型“[String : CLLocationCoordinate2D]”的值分配给类型“CLLocationCoordinate2D”

【问题讨论】:

    标签: swift xcode dictionary mapkit latitude-longitude


    【解决方案1】:

    value 是[String : CLLocationCoordinate2D] 类型的字典

    你必须得到键cord的值,只有当键值对更多时才需要类型转换。

    for havner in dict {
        map.setRegion(MKCoordinateRegionMake(havner.value, MKCoordinateSpan(latitudeDelta: 0.1, longitudeDelta: 0.1)), animated: true)
        let mk = MKPointAnnotation()
        mk.coordinate = havner.value["cord"]! // as! CLLocationCoordinate2D
        mk.title = havner.key
        map.addAnnotation(mk)
        }
    }
    

    和

    mk.subtitle = havner.value["description"] as! String
    

    我建议使用结构

    struct Havner {
        let name : String
        let coordinate : CLLocationCoordinate2D
        let description : String
    }
    

    还有一个Havner的数组,那么你可以使用像havner.description这样的点语法

    【讨论】:

    • 但是我要加几千,那这样是不是最有效的方法?
    • 一个(更具体的)结构总是比一个(不太具体的)字典更有效。更有效的是将港口信息存储在 json 或属性列表文件中,然后使用 Decodable 将其解码为结构体
    猜你喜欢
    • 1970-01-01
    • 2012-07-17
    • 1970-01-01
    • 1970-01-01
    • 2020-01-09
    • 2021-09-11
    • 2013-03-27
    • 2017-11-07
    • 1970-01-01
    相关资源
    最近更新 更多