Noob程序员在这里。
我正试图在互联网的帮助下成为一名优秀的程序员。所以,我订阅了Rob Percivals iOS类。我在使用这段代码时遇到了麻烦。一定是最近的更新,它使我的系统失败,尽管它与他的代码相同。
CLGeocoder().reverseGeocodeLocation(userLocation) { (placemarks, error) in
if (error != nil) {
print(error)
} else {
if let p = CLPlacemark(placemark: placemarks![0] as! CLPlacemark) {
print(p)
}
}
}
}
如果可能的话,请尽量用英语写英文。谢谢!
答案 0 :(得分:0)
placemarks
的类型为[CLPlacemark]?
。因此,您应该尝试以下内容:
if let placemarks = placemarks {
if let p0 = placemarks.first {
print (p0)
}
}
不要使用!
。请改用if let
。
答案 1 :(得分:0)
错误消息只是说初始值设定项CLPlacemark(placemark:)
永远不会返回nil
值,因此减少代码甚至删除类型转换,因为根据签名[CLPlacemark]?
返回。不需要可选绑定,因为如果错误是nil
,则保证阵列存在。
...
} else {
if !placemarks!.isEmpty {
let p = CLPlacemark(placemark: placemarks![0])
print(p)
}
}
答案 2 :(得分:0)
我建议使用一个保护声明更进一步,并且使用变量名称p更加冗长... Guard是退出当前流程的好方法,而不会使代码混乱陈述,特别是因为“如果让...”可选的解包语法出现了。
CLGeocoder().reverseGeocodeLocation(userLocation) { (placemarks, error) in
guard error == nil else {
print(error)
return
}
if let placemark = placemarks?.first {
let currentPlacemark = CLPlacemark(placemark: placemark)
print(currentPlacemark)
}
}