2014-06-06 32 views
5

如果a與c相同,b與c相同,爲什麼a與b不相同?Swift中的身份運算符

var a = [1, 2, 3] 
var b = a 
var c = a[0...2] 
a === c     // true 
b === c     // true 
a === b     // false 

如果A,B,C爲常數:

let a = [1, 2, 3] 
let b = a 
let c = a[0...2] 
a === c     // true 
b === c     // true 
a === b     // true 

回答

0

@onevcat說,這可能是一個遊樂場的錯誤。如果您將a更改爲參考類型的對象,則所有身份測試將爲true

class K {} 
var a = [K(), K(), K()] 
var b = a 
var c = a[0...2] 
a === c     // true 
b === c     // true 
a === b     // true 

這意味着ab & c共享相同的存儲和元素。

+0

謝謝你和@onevcat。我將我的代碼複製到.swift文件並在終端中運行,所有測試都是正確的。 – Tao

+0

雷達提交:http://openradar.appspot.com/radar?id=6240029269557248 rdar:// 17192099 –

0

有趣的是,我的猜測是,由於cvar在第一種情況下,其可變的,因此它必須進行復印。這樣,如果你添加到c它不會修改a。在第二種情況下,它們都是不可變的,因此它們可以指向相同的內存空間

2

如果您正在玩PlayGround以使其正確,您可以刪除import Cocoaimport UIKit。似乎在Cocoa框架中有一些類型映射的東西來搞砸了。這應該是一個錯誤,我想。