ios - xcode 7 Beta 6 中地标地址字典的更改

标签 ios swift swift2 xcode7

我已升级到 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可选转换 为? String 会将 nil 转换为具有 nil 值的 String?,并且 ?? 将将其替换为空字符串""
  2. 如果"Street"不是字典中的有效键,placeMarkAddress?["Street"]将返回nil,这将如第 1 点所述转换为 ""
  3. 如果字典中与键 "Street" 对应的值的类型不是 String,则条件转换将返回String? 的值为 nil?? 将转换为 ""
  4. 最后,如果该值存在并且是一个 String,则使用 nil 合并运算符 ?? 安全地从字典中解包该值,否则它替换提供的默认值(空 String "")。

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

相关文章:

ios - 访问 UIButton 的 subview 控件

ios - LinkedIn 应用内浏览器强制视频在 iPhone 上全屏显示

ios - 在 Swift 中调用 API 时出现问题

ios - 渐变颜色随内容 View 的高度变化

swift - 使用类作为键的字典数组中的索引超出范围 - swift

Swift 2.0 GeoCoder 参数列表

arrays - 将项目插入空数组

ios - 获取设备位置而不在单点触控上显示蓝点

ios - 为什么目标 ViewController 的 View 对象在 prepareForSegue 中默认为 nil?

ios - BecomeFirstResponder 和多个 UITextField 焦点