它適用於簡單的類型,是因爲有一種==
一個版本是針對包含有Equatable
類型自選定義:
func ==<T : Equatable>(lhs: T?, rhs: T?) -> Bool
不過,雖然Int
是Equatable
,Array
是不是(因爲它可能包含一些不可比較的東西 - 在這種情況下它可能會如何)。所有Equatable
東西都有一個==
運算符,但不是所有運算符==
都是Equatable
。
你可以寫的==
一個特殊情況版專爲含equatable類型可選的陣列:
func ==<T: Equatable>(lhs: [T]?, rhs: [T]?) -> Bool {
switch (lhs,rhs) {
case (.Some(let lhs), .Some(let rhs)):
return lhs == rhs
case (.None, .None):
return true
default:
return false
}
}
你也可以推廣爲覆蓋包含equatable元素的任何集合:
func ==<C: CollectionType where C.Generator.Element: Equatable>
(lhs: C?, rhs: C?) -> Bool {
switch (lhs,rhs) {
case (.Some(let lhs), .Some(let rhs)):
return lhs == rhs
case (.None, .None):
return true
default:
return false
}
}
你使用的是什麼版本的Swift?你的第二個案例給了我一個錯誤'變量'y'被初始化之前' – aganders3
可能重複的[Swift錯誤比較兩個可選擇的數組](http://stackoverflow.com/questions/28830411/swift-error-comparing-雙陣列選項) – milo526
對不起,我是從操場上輸入的。更正了這個問題。 –