2
Swift中的數組能夠存儲任何包含Struct,Enum和Class實例的Swift類型。但是沒有函數==
能夠比較任何類型的Swift對象。而===
運算符也只能比較兩個引用。所以我想知道,函數被調用時,Swift中的Array如何知道它包含一個元素。Swift中的數組如何知道它是否包含元素?
Swift中的數組能夠存儲任何包含Struct,Enum和Class實例的Swift類型。但是沒有函數==
能夠比較任何類型的Swift對象。而===
運算符也只能比較兩個引用。所以我想知道,函數被調用時,Swift中的Array如何知道它包含一個元素。Swift中的數組如何知道它是否包含元素?
如果你看一下函數簽名:
func contains<S : SequenceType where S.Generator.Element : Equatable>(seq: S, x: S.Generator.Element) -> Bool
你看到數組中的元素必須有我實現Equatable
協議的類型,其中只包含一個方法:
func ==(lhs: Self, rhs: Self) -> Bool
因此可以使用任何實現Equatable
協議的類型。
如果你定義你自己的類(或結構等),使用contains
你只需要實現該協議。
感謝您的回答。直到看到你的答案,我才知道where子句。 – WeZZard 2014-10-12 14:53:02