在字典中访问字典并将其分配给变量

时间:2018-08-03 16:51:51

标签: swift xcode dictionary mapkit latitude-longitude

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

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"]

然后访问字典的Description部分,如下所示:

mk.subtitle = havner.description

错误:

  

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

     

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

1 个答案:

答案 0 :(得分:0)

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