[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 的成员的主要内容,如果未能解决你的问题,请参考以下文章

编码 CLLocationcoordinate2D

NSKeyedArchiver 因 CLLocationCoordinate2D 结构而失败。为啥?

使用未解析的标识符“CLLocationCoordinate2D”

在 Swift 3 中解析 JSON (CLLocationCoordinate2D)

CLLocationCoordinate2D 无法实例化

将 CLLocation 或 CLLocationCoordinate2D 转换为 CGPoint