使用class和類名來建立乙個類,類中屬性的宣告和常量、變數宣告一樣,唯一的區別就是它們的上下文是類。同理,函式和方法也一樣
class
shape
}
要建立乙個類的例項,在類名後面加上括號。使用點語法在訪問例項的屬性和方法
var shape = shape()
shape.numberofsides = 7
var shapedescription = shape.******description()
練習:使用let新增乙個常量屬性,再新增乙個接收乙個引數的方法
class
team
}var team = team()
var fruits = team.teamnumber(9)
這個版本的shape類缺少了一些重要的東西:乙個建構函式來初始化類例項。使用init來建立乙個構造器
class
numbershape
func ******description() ->string
}var numbershape = numbershape(name: "unique")
print(numbershape.name)
numbershape.numberofsides = 7
numbershape.******description()
注意self是用來區分例項變數。當建立例項的時候,像傳入函式引數一樣也需要給構造器傳入引數
每個屬性都需要賦值 – 無論是通過宣告(就像numberofsides)還是通過構造器(就像name)
如果你需要在刪除物件之前進行一些清理工作,使用deinit建立乙個析構函式
子類的定義方法是在它們的類名後面加上父類的名字,用冒號分割。建立類的時候不需要標準的根類,所以可以忽略父類
子類如果要重寫父類方法的話,需要用override標記 – 如果沒有新增override就重寫父類方法的話編譯器會報錯,同樣,編譯器會檢測override標記的方法是否在父類中
class square: numbershape
func area() ->double
override func ******description() ->
string
}let test = square(sidelength: 5.2, name: "my test square")
test.area()
test.******description()
練習:建立numbershape的另乙個子類circle,構造器接受兩個引數,乙個是半徑乙個是名字,在子類circle中實現area()和simpdescription()方法
class circle: numbershape
func area() ->double
override func ******description() ->
string
}let circle = circle(radius: 5, name: "半徑")
circle.area()
circle.******description()
除了儲存簡單的屬性之外,屬性可以有getter和setter
class
equilaterl********: numbershape
var perimeter: double
set
}override func ******description() -> string
}//swift會為每乙個屬性生成乙個get方法,乙個set方法,如果沒有寫的情況下,當然如果你寫了,那系統就會用你的 取值呼叫get 賦值呼叫set
var ******** = equilaterl********(sidelength: 3.1, name: "a ********")
print(********.perimeter)
********.perimeter = 9.9
print(********.sidelength)
注意:
equilaterl********類的構造器執行了三步:
1.設定子類宣告的屬性值
2.呼叫父類的構造器
3.改變父類定義的屬性值,其他工作也在這一階段完成,例如:呼叫方法、getter、setter
如果你不需要計算屬性,但仍然需要在設定乙個新值之前或之後執行,可以使用willset和didset
比如,下面的類確保三角形的邊長總是和正方形的邊長相同
class ********andsquare
}var square: square
}init(size: double,name: string)
}var triangeandsquare = ********andsquare(size: 10, name: "another test shape")
print(triangeandsquare.square
.sidelength)
print(triangeandsquare.********
.sidelength)
triangeandsquare.square = square(sidelength: 50, name: "larger square")
print(triangeandsquare.********
.sidelength)
處理變數的可選值時,你可以在操作(方法、屬性、子指令碼)之前加?
如果?之前的值是nil,?後面的東西都會被忽略,並且整個表示式返回nil,否則,?之後的東西都會被執行
這兩種情況下,整個表示式的值都是乙個可選值
let optionalsquare: square? = square(sidelength: 2.5, name: "optional square")
let sidelength = optionalsquare?.sidelength
swift的類和物件
1 類的關鍵字 是class。類裡面可以有常量,變數,和函式。成員變數 每個變數都要賦初值 class shape 生成乙個shape類的物件 相當於我們oc 中的 shape s shape alloc init 可以通過 去點到他們的例項變數和方法。var s shape print s的邊數為...
Swift 的類和物件
類的定義 類定義的關鍵字是class,我們用class 類名 父類,比如定義乙個person類,類中去宣告和定義變數和函式 class person nsobject 複製 類的擴充套件 extension person 複製 儲存屬性 儲存屬性就是儲存在類或者結構體乙個例項裡的乙個常量和變數,用v...
Swift2學習 Swift概覽4 物件和類
物件和類 使用class並在其後面跟著類名來建立乙個類。類中常量或者變數已同樣的方法宣告,除非他是類的上下文 類之外 同樣的,方法和類以同樣的方式宣告。class shape 練習 通過let新增乙個常量屬性,並新增另外乙個方法來使用這個引數。通過在類名之後放置一對圓括號來建立乙個類物件。通過小數點...