Swift2學習 Swift概覽4 物件和類

2021-07-04 01:59:22 字數 2490 閱讀 3913

物件和類

使用class並在其後面跟著類名來建立乙個類。類中常量或者變數已同樣的方法宣告,除非他是類的上下文(類之外)。同樣的,方法和類以同樣的方式宣告。

class shape }

練習 通過let新增乙個常量屬性,並新增另外乙個方法來使用這個引數。

通過在類名之後放置一對圓括號來建立乙個類物件。通過小數點(.)訪問物件的屬性和方法。

var shape = shape()

shape.numberofsides = 7

var shapedescription = shape.******description()

print(shapedescription)

這個版本的shape類丟失了一些重要的東西:當建立乙個物件時乙個初始化類的方法。用init來建立乙個。

class nameshape

deinit

func ******description() -> string }

注意怎樣使用self去區別成員變數name和用來初始化的入參name。傳遞用來初始化的引數就像呼叫類物件的函式一樣。每個屬性都需要被複製--或者在宣告的時候賦(就像numberofsides)或者在初始化方法中(就像name)。

如果你需要在物件釋放前做一些清理工作,使用deinit。

子類類名之後包含他們的基類名,用冒號分割。對類來說不必寫明他繼承哪個標準基類,所以根據需要包含或者省略基類名。

在子類中重寫基類中的方法需要用override來標識--有時確實需要重寫,不用override編譯器會檢測到一條錯誤。編譯器同樣會檢測到那些在基類中帶有override標識但是事實上不用重寫的方法。

class square: nameshape

func area() -> double

override func ******description() -> string

}let test = square(sidelength: 5.2, name: "my test square")

test.area()

test.******description() 練習

構造另外乙個名為circle繼承nameshape的子類,接收半徑和名稱做為初始化引數。通過circle類呼叫area()和******description()方法。

除了簡單的屬性儲存,屬性還提供了獲得和設定方法。

class equilateral********: nameshape

var perimeter: double

set

}override func ******description() -> string

}var ******** = equilateral********(sidelength: 3.1, name: "a ********")

print(********.perimeter)

********.perimeter = 9.9

print(********.sidelength)

在perimeter的設定方法中,新值隱式的命名為newvalue。你可以在set後的圓括號裡顯式的為新值給出乙個名字。

注意在類equilateral********的初始化方法中有三個不同的步驟:

1.設定子類屬性的值。

2.呼叫基類初始化方法。

3.改變基類中屬性的值。任何額外的設定工作(如用到方法,獲得器,設定器的)都可以在這進行。

如果你不需要計算屬性但仍然需要提供一段**在賦值前或後執行,使用willset和andset。例如,下面的這個類確定三角形的邊長與正方形的邊長相等。

class ********andsquare

}var square: square

}init (size: double, name: string)

}var ********andsquare = ********andsquare(size: 10, name: "another test shape")

print(********andsquare.square.sidelength)

print(********andsquare.********.sidelength)

********andsquare.square = square(sidelength: 50, name: "larger square")

print(********andsquare.********.sidelength)

當碰到可選值時,在賦值之前寫上?就像方法,屬性,和下標一樣。如果?前面的值是nil,?之後的所有語句都被忽略並且整個表示式的值為nil。否則,可選值啟用,並且問號後面的語句做為啟用的值。在這兩種情況下,整個表示式的值就是可選值。

let optionalsquare: square? = square(sidelength: 2.5, name: "optional square")

let sidelength = optionalsquare?.sidelength

Swift2學習 Swift概覽2 控制流

控制流 使用if和switch構建條件語句,使用for in,for,while和repeat while構建迴圈語句。括號括主條件語句或迴圈變數是可選的。但是擴主主語句是必須的。for score in individualscores else if score 50 else print te...

Swift2學習 Swift概覽6 協議和擴充套件

協議和擴充套件 用protocol宣告乙個協議。protocol exampleprotocol mutating func adjust 類,列舉和結構體都可以接受協議。class class exampleprotocol var a class a.adjust let adescriptio...

從零學習Swift 2

定義let 定義常量,一經賦值不允許再修改 var 定義變數,賦值之後仍然可以修改 常量 定義常量並且直接設定數值 let x 20 常量數值一經設定,不能修改,以下 會報錯 x 30 使用 型別 僅僅只定義型別,而沒有設定數值 let x1 int 常量有一次設定數值的機會,以下 沒有問題,因為 ...