试试这个:
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发布了一个示例项目
答案 0 :(得分:3)
事实上,Objective-C API(实质上是任何UI *或NS *类)的所有实例实际上都是可选的,尽管通过声明看起来并不是这样,因为Objective-C类型总是nil
。 NSURL
数组本质上是一个隐式展开的可选NSURL
或NSURL![]
的数组。
(我在this answer中解释了更多。)
所以这不是一个错误,该数组可以采用nil
值,但它是两个评估为相等的错误。把你带到bugreport.apple.com。