Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Swift&x27中的Bug;什么是数组相等的概念?_Arrays_Swift - Fatal编程技术网

Arrays Swift&x27中的Bug;什么是数组相等的概念?

Arrays Swift&x27中的Bug;什么是数组相等的概念?,arrays,swift,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 += ur

试试这个:

    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!?
经过一些实验,我认为这与期权有关
url1
返回为nil,因此为了形成两个url的数组,Swift必须将这些数组(我猜)视为
可选的
数组。但我仍然认为这是一个错误;这就好像比较一系列可选NSURL的概念让Swift不知何故举起了手。。。有人可能会说,这也是另一种意义上的bug,因为我将这些数组显式地键入为
NSURL[]
;我没有说
NSURL?[]
,那么为什么Swift首先允许一个可选的进入它们呢

我想知道是否有人注意到类似的事情,这可能会让事情变得明朗。(我不认为这有什么关系,当然我可能错了。)


编辑有些人表示无法重现该问题,因此我在

上发布了一个示例项目。事实上,Objective-C API(基本上是任何UI*或NS*类)中的所有实例实际上都是可选的,尽管通过声明似乎不是可选的,因为Objective-C类型始终可以是
nil
NSURL
数组本质上是隐式展开的可选
NSURL
s或
NSURL![]

(我在书中解释了更多。)


因此,数组可以取
nil
值并不是一个bug,而是两个值相等的bug。请访问。

这没有多大意义,如果
url1
是可选的,则在没有编译器错误的情况下无法将其添加到数组中。在我的游乐场中,
let url1=NSURL(字符串:“foo-bar”)
抛出一个异常,如果我添加这样的类型:
let url1:NSURL?=NSURL(字符串:“foo-bar”)
。然后
url1
nil
,但编译器抱怨将其添加到数组中。不管怎样,我都无法到达比较线all@JackWu请大家忘记操场好吗?它们严重损坏,行为不正确或与应用程序不一致。唯一重要的地方是应用程序。真实的、编译过的应用程序。我的代码来自一个应用程序。而且它是基于一个更复杂的,经常遇到的现实生活中的情况。这不是一种诡计;这可以归结为一种技巧,只是为了简洁地说明这个问题。斯威夫特和游乐场一样是beta版,所以要提交一份雷达文件吗?我不知道你为什么期望Swift表现良好,因为在我的测试中,游乐场严重损坏,它在obc_retain()中的
arr1+=url2
处崩溃,EXC_BAD_访问。在此之前,数组报告具有指向NSObject的非nil指针。在为第二次追加复制数组时,怀疑它正在向垃圾指针发送retain。“小虫子比比皆是。@马特,请确保你提交了雷达文件。目前唯一的解决方案是在将NSURL添加到阵列之前检查NSURL是否为
nil