[CLLocationCoordinate2d]?没有名为 subscript 的成员
Posted
技术标签:
【中文标题】[CLLocationCoordinate2d]?没有名为 subscript 的成员【英文标题】:[CLLocationCoordinate2d]? does not have a member named subscript 【发布时间】:2015-01-02 15:29:02 【问题描述】:我试图从数组第一个元素中的 CLLocationCOordinate2d 中获取纬度和经度。如果让我说 [CLLocationCoordinate2d],我得到一个错误?没有名为 subscript 的成员。有任何想法吗?谢谢!
override func viewDidLoad()
super.viewDidLoad()
weather.getLocationDataFromString("California USA", completion: (location:[CLLocationCoordinate2D]?,error:NSError?) -> (Void) in
if location != nil
if let coordinate = location[0] as CLLocationCoordinate2D // ERROR: [CLLocationCoordinate2d]? does not have a member named subscript
println(coordinate.latitude)
)
【问题讨论】:
【参考方案1】:这是一个可选的,所以你需要打开它。您已经在检查nil
,所以您就快到了:
if let location = location
if let coordinate = location[0] as CLLocationCoordinate2D
println(coordinate.latitude)
或者,如果你想要的只是第一个元素,也许更好:
if let coordinate = location?.first as? CLLocationCoordinate2D
println(coordinate.latitude)
【讨论】:
成功了!谢谢!创建一个全新的位置变量不是很乏味吗?我不是很喜欢 swift 的整个选项。 对于第一个我收到一个错误,说条件绑定中的绑定值必须是可选类型 这有点乏味,但这只是因为它迫使您检查一些没有选项的东西,您还应该检查 - 也就是说,从getLocationDataFromString
返回的结果是有效的(它可能不是),并且该数组实际上具有第一个元素(它可能没有)。如果没有可选项,您可以忽略这些可能性但那将是一个坏主意并导致运行时崩溃。选项只会强迫你做正确的事。当然,如果上下文意味着您可以确定可选包含一个值,您可以使用!
跳过展开。但是 99/100 你不应该。
查看this answer以获得更详细的解释...
“对于第一个,我收到一个错误,说条件绑定中的绑定值必须是可选类型”当您在 =
的右侧有一个非可选类型时,您会得到.鉴于location
绝对是可选的(您在上面声明它)我怀疑某处有错字。以上是关于[CLLocationCoordinate2d]?没有名为 subscript 的成员的主要内容,如果未能解决你的问题,请参考以下文章
NSKeyedArchiver 因 CLLocationCoordinate2D 结构而失败。为啥?
使用未解析的标识符“CLLocationCoordinate2D”