swift課程 02 swift高階

2021-07-05 22:44:50 字數 2546 閱讀 1977

類與結構體的區別:

1)結構體自帶乙個初始化所有屬性的初始化方法,而類帶有乙個不含任何引數的建構函式

2)結構體是值型別,每次拷貝乙份新的內容,修改原來的,不會影響新的

類是引用型別,賦值就像是oc中的指標指向,無論通過哪個變數名修改,都是在操作乙個物件

1.類

類的寫法

注意:宣告類方法:可以在前面新增static關鍵字,或者新增class關鍵字

二者的區別:class修飾的方法,子類繼承時可以被重寫,static 修飾的不可以

// 類的寫法

class

person

// 宣告類方法:(可以在前面新增static關鍵字,或者新增class關鍵字)

static func sayhello()

class

func

sayhello2()

// 類擁有乙個建構函式,但是不包含引數,重寫建構函式

init(name: string, age: int)

class

student: person

override

class

func

sayhello2()

}

建立物件,並且呼叫方法

//let修飾,但是可以修改內部的屬性值,只是不可以給person整體賦值,eg:不可以person = p

let person = person(name: "da hua zi", age: 12)

person.name = "大華子"

計算屬性

class

rect

set

}var centery: int

set

}// 建構函式

init(x: int, y: int, width: int, height: int)

}

計算屬性的使用

let rect = rect(x: 10, y: 20, width: 100, height: 100)

rect.centerx = 1000

print(rect.centerx) //值是60,並非後面的賦的值

2.協議注意:宣告協議方法,預設必須實現

protocol marryprotocol 

//宣告可選的協議方法 @objc

@objcprotocol

marryprotocol2

定義乙個類,並且遵守協議

class latiao: marryprotocol, marryprotocol2 

func test2()

//如果實現可選協議方法,在沒有父類的情況下,需要新增@objc關鍵字

//如果實現可選協議方法,有父類,直接寫就可以了

@objc func test4()

}

3.extensionswift中沒有類目,但是extension的作用類似類目

注意:既可以給結構體擴充套件方法,也可以給類擴充套件方法

//給類擴充套件方法

extension person

}//給結構體擴充套件方法

extension int

return i

}}let res = 2.test(4)

4.閉包閉包類似 block

宣告閉包變數

var

sumclosure: ((a: int, b: int) -> int)? //可選

varsumclosure2: ((int, int) -> int)? //可以省略引數名

給閉包賦值

sumclosure2 = 

sumclosure2 =

sumclosure2 =

sumclosure2 =

sumclosure2 =

sumclosure2 =

呼叫

let resu = sumclosure2!(23, 54)
給閉包起別名

typealias closure = (int, int) -> int

Swift入門 02邏輯分支

var i 10 if i 0 var a 10 var b 50 var result a b a b print result let url nsurl string if url nil resume swift convenience init?string urlstring strin...

swift小結02 基礎篇

閉包 類似於 oc 中的 block,是一段預先定義好的 在需要時執行 閉包表示式格式 in用於區分閉包定義和 實現 定義有引數a的閉包 let coluse 定義無引數的閉包 let coluse1 let coluse2 尾隨閉包 當閉包是最後乙個引數的時候,將閉包放在引數整個 外面 uivie...

Swift 02 常量和變數

playground noun a place where people can play import uikit var str hello,playground 常量的定義用let let maxlogincount 10 變數的定義用var var currentlogincount 0 c...