gpt4 book ai didi

ios - xcode 7 Beta 6 中地标 addressDictionary 的更改

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:00:04 24 4
gpt4 key购买 nike

我已经升级到 xcode 7 beta 6,因为 iOS 9 即将推出。我很高兴我的代码转换没有太多麻烦,除了一个异常(exception)。

似乎 placemark.addressDictionary 已更改为 [NSObject: AnyObject]

这是我在 xCode 6 中用于 map 搜索的代码

for item in response.mapItems as! [MKMapItem] {
var placeMarkAddress = item.placemark.addressDictionary
let street:String = placeMarkAddress["Street"] != nil ? placeMarkAddress["Street"] as! String : ""
}

这不再有效,因为 placeMarkAddress 现在是 [NSObject: AnyObject]?

如何通过按名称引用 NSObject 来获取值 (AnyObject)?

我已经在 xcode7 中试过了

 for item in response!.mapItems {
var placeMarkAddress = item.placemark.addressDictionary
for placeMarkAddress in placeMarkAddresses!{
print(placeMarkAddress)
}
}

我得到的输出是这样的。

 (FormattedAddressLines, [440 Castro St, San Francisco, CA  94114-2020, United States])
(Street, 440 Castro St)
(SubAdministrativeArea, San Francisco)
(Thoroughfare, Castro St)
(ZIP, 94114)
(Name, 440 Castro)
(City, San Francisco)
(PostCodeExtension, 2020)
(Country, United States)
(State, CA)
(SubLocality, Castro)
(SubThoroughfare, 440)
(CountryCode, US)

这对你们中的一些人来说可能是显而易见的,但我仍然是 iOS 开发的新手。

最佳答案

因为 placeMarkAddress[NSObject: AnyObject]?,所以你必须在使用它之前打开它。可选的链接 ? 在这里很合适;如果字典不是 nil,它将打开字典;如果字典是 nil,它将安全地返回 nil

而不是显式检查 nil 并使用 ? : 运算符来替换 "",有一个特殊的运算符可以做到这一点,称为 nil 合并运算符 ?? 它被使用像这样:

let street = placeMarkAddress?["Street"] as? String ?? ""

以这种方式编写语句可以通过 4 种方式保护您:

  1. 如果 placeMarkAddressnil可选链 placemarkAddress?["Street"] 将返回 nil可选类型转换 as? String 会将 nil 转换为具有 nil 值的 String?,而 ?? 将将其替换为空字符串 ""
  2. 如果 "Street" 不是字典中的有效键,placeMarkAddress?["Street"] 将返回 nil,这将如第 1 点所述,转换为 ""
  3. 如果字典中对应键"Street" 的值的类型不是String,则条件转换 将返回一个String? 的值为 nil?? 将转换为 ""
  4. 最后,使用 nil 合并运算符 ?? 安全地解包字典中的值(如果它存在并且是 String),否则它替换提供的默认值(空 String "")。

关于ios - xcode 7 Beta 6 中地标 addressDictionary 的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32267726/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com