Swift的数组相等概念中的错误?

时间:2014-07-02 20:44:28

标签: arrays swift

试试这个:

    let url1 = NSURL(string: "foo bar")
    let url2 = NSURL(string: "http://www.apple.com")
    var arr1 = NSURL[]()
    var arr2 = NSURL[]()
    // one order
    arr1 += url1
    arr1 += url2
    // other order
    arr2 += url2
    arr2 += url1
    // equality test
    println(arr1 == arr2) // true!?

经过一些实验,我认为这与Optionals有关。 url1以nil的形式返回,因此要形成两个url的数组,Swift必须将这些数组(我猜是)视为Optional<NSURL>的数组。但我仍然认为这是一个错误;就好像比较一组可选NSURL的概念会导致Swift以某种方式举手......而且,有人可能会说,这也是另一种意义上的错误,因为我明确地将这些数组键入为NSURL[];我没有说NSURL?[],那么为什么Swift首先允许一个Optional进入他们?

我想知道是否有人注意到任何类似的东西可能会对此事有所启发。 (我不认为this post是相关的,但我当然可能是错的。)

编辑有些人表示无法重现此问题,因此我在https://github.com/mattneub/SwiftArrayEqualityTest发布了一个示例项目

1 个答案:

答案 0 :(得分:3)

事实上,Objective-C API(实质上是任何UI *或NS *类)的所有实例实际上都是可选的,尽管通过声明看起来并不是这样,因为Objective-C类型总是nilNSURL数组本质上是一个隐式展开的可选NSURLNSURL![]的数组。

(我在this answer中解释了更多。)

所以这不是一个错误,该数组可以采用nil值,但它两个评估为相等的错误。把你带到bugreport.apple.com