我們可以使用類在Swift中定義類型。
類為我們提供了一種將相關(guān)信息和行為組合在一起的方法。
要定義一個Swift類,使用 class
關(guān)鍵字。
class Person { var name: String = "Name" var age:Int = 0 func profile() -> String { return "I"m \(self.name) and I"m \(self.age) years old." } }
在上面的代碼中,我們定義了一個名為 Person
的類。
Person
類由一個人姓名的字符串組成一個人的年齡的整數(shù)。
這些變量和常量類型稱為屬性。
要使用 Person
實例,請根據(jù)此定義創(chuàng)建一個新實例。
class Person { var name: String = "Name" var age:Int = 0 func profile() -> String { return "I"m \(self.name) and I"m \(self.age) years old." } } var p = Person()
在Swift中,對象通常是對結(jié)構(gòu)和類的實例的引用。
對于類實例屬性,您使用點語法。
p.name = "Tom" p.age = 40
在上面的代碼中,我們使用點語法來更改變量值。
類是引用類型。
使用賦值運算符時,只分配對實例的引用。
當更改類實例成員時,它們將反映在實例無處不在的程序。
struct S { var i = 1 } class C { var i = 1 } var s = S() var c = C() println("s.i = \(s.i)") println("c.i = \(c.i)")
清單32-2中的語句將打印:
s.i = 1 c.i = 1
引用和復(fù)制實例之間的主要區(qū)別發(fā)生在使用賦值運算符 =
來引用實例時。
對于結(jié)構(gòu),在分配期間將獲取實例的副本。此副本獨立于原始實例操作。更改副本不會反映在原始實例中。
將變量分配給類實例會對類實例成員進行更改,原來的實例內(nèi)容也會改變。
struct S { var i = 1 } class C { var i = 1 } var s2 = s var c2 = c s2.i = 2 c2.i = 2 println("s.i = \(s.i)") println("c.i = \(c.i)")
上面的代碼生成以下結(jié)果。
從輸出我們可以看到原始結(jié)構(gòu)成員不會改變原始類的實例成員的值更改為與值相同 c2
上的 i
屬性。
類相等運算符===比較兩個類實例。
如果實例變量都指向同一個實例,此運算符將返回true。
class Person { var name: String = "Name" var age:Int = 0 func profile() -> String { return "I"m \(self.name) and I"m \(self.age) years old." } } var p1 = Person() p1.name = "A" p1.age = 40 var p2 = Person() p2.name = "B" p2.age = 25 var b1 = p2 === p2 var b2 = p1 === p2
上面的代碼生成以下結(jié)果。
b1是真的,因為它們都是相同的實例,b2為假。
類實例不等式身份操作符!==
測試看是否兩個實例不指向同一實例。
var b7 = p1 !== p1 //returns false
更多建議: