在Swift中類和結構體有高度的相似性。二者主要區別是:
1. 結構體不支持繼承
2. 結構體不支持定義析構器
3. 結構體是值類型,而類是引用類型
[修飾符]class 類名
{
零個到多個構造器
零個到多個屬性
零個到多個方法
零個到多個下標
}
對一個類定義而言,包括3種最常見的成員:構造器、屬性、方法,如果程序員沒有為一個類提供構造器,則系統會為該類提供一個默認、無參數的構造器。一旦程序員為該類提供了構造器,則系統不會再為該類提供默認的構造器。
[修飾符]struct 結構體名
{
零個到多個構造器
零個到多個屬性
零個到多個方法
零個到多個下標
}
結構體不能定義final,因為結構體不支持繼承。如果程序員沒有為結構體提供構造器,系統則會為該結構體提供兩個構造器:一個無參數的構造器,一個初始化所有存儲屬性的構造器。
[修飾符]func 方法名(形參列表)-[->返回值類型]
{
//具體功能代碼
}
如果想定義類方法可以用class修飾符
class Person
{
var name:String=""
var age:Int=0
func say(content:String)
{
print(content)
}
}
上面代碼中並沒有定義構造器,系統將為它提供一個默認的、無參數構造器,但這個默認的構造器不會為存儲屬性分配初始值,因此必須有程序為這些存儲屬性指定初始值。
注意:類是引用類型
var p:Person
p=Person()
p.name="六小齡童"
var p1=p
p1.name="孫悟空"
print(p.name)//輸出孫悟空
引用類型有兩個運算符==和!==,這兩個運算符只能用於引用類型量的比較,當兩個引用類型的變量是否指向同一個實例,當兩個引用變量指向同一個實例時,==比較得到true,當兩個引用變量不指向同一個實例時,!==比較得到true
class Person
{
var name:String=""
var age:Int=0
init(name:String,age:Int)
{
self.name=name
self.age=age
}
func say(content:String)
{
print(content)
}
}
var p1=Person(name:"孫悟空",age:2100)
var p2=Person(name:"六小齡童",age:48)
print(p1==p2)//輸出false
print(p1 !== p2)輸出true
var p3=p1
print(p1 == p3)//輸出true
struct Monkey
{
var name:String
var age:Int
func say()
{
print("\(name)的年齡為\(age)")
}
}
var monkey=Monkey(name:"孫悟空",age:1500)
print(monkey.name)
上面代碼調用了Monkey帶的兩個參數的構造器中的一個創建實例,結構體默認會創建兩個構造器:一個無參的構造器和一個初始化所有存儲屬性的構造器。
當調用無參構造器時
var monkey=Monkey()
print(monkey.age)//輸出0