iOS開發之Swift篇(14) 協議

2021-10-03 11:26:43 字數 2843 閱讀 1739

屬性要求

方法要求

構造器要求

委託xcode 11.3.1

swift 5.1.3

協議規定了用來實現某一特定功能所必需的方法和屬性。

類,結構體或列舉型別都可以遵循協議,並提供具體實現來完成協議定義的方法和功能。

protocol

someprotocol

讓自定義型別遵循多個協議:

struct

somestructure

:firstprotocol

,anotherprotocol

若是乙個類擁有父類,應該將父類名放在遵循的協議名之前,以逗號分隔:

class

someclass

:somesuperclass

,firstprotocol

,anotherprotocol

協議不指定屬性是儲存屬性還是計算屬性,它只指定屬性的名稱和型別。

此外,協議還指定屬性是可讀的還是可讀可寫的。

如果協議規定可讀可寫,那麼協議的實現也是可讀可寫的;如果協議規定可讀,實現除了可讀外,也可根據實際需要是否可寫。

在型別宣告後加上 來表示屬性是可讀可寫的,用 來表示唯讀。

protocol

subject

var score:

int}

struct

math

:subject

var score =0}

var math =

math()

= "chinese" // 唯讀屬性,報錯

math.score =

100print

(math.name, math.score)

// 列印 math 100

協議可以要求遵循協議的型別實現某些指定的例項方法或類方法。

protocol

sayhello

class

person

:sayhello

func

sayhello()

}let xiaoming =

person

(name:

"小明"

)xiaoming.

sayhello()

// 小明 say hello

let xiaohong =

person

(name:

"小紅"

)xiaohong.

sayhello()

// 小紅 say hello

你可以在遵循協議的類中實現構造器,無論是作為指定構造器還是作為便利構造器,你都必須為構造器實現標上 required 修飾符:

protocol

sayhello

class

person

:sayhello

func

sayhello()

}let xiaoming =

person

(name:

"小明"

)xiaoming.

sayhello()

// 小明 say hello

let xiaohong =

person

(name:

"小紅"

)xiaohong.

sayhello()

// 小紅 say hello

protocol

studentname

class

student

:person

,studentname

}let xiaojun =

student

(studentname:

"學生小軍"

)xiaojun.

sayhello()

// 學生小軍 say hello

委託是一種設計模式,它允許類或結構體將一些需要它們負責的功能委託給其他型別的例項。

舉個例子:

// 定義乙個看門的協議

protocol

watchdoor

// 人類會看門,所以遵循 watchdoor 協議

class

people

:watchdoor

func

watchdoor()

// 定義乙個被委託物件,來**看門任務 (現在這個被委託物件是誰還不知道)

var delegate:

watchdoor?=

nil}

// 打南面來了一條狗

class

dog}

// 某天這狗的任督二脈被打通,從此具備看門的能力

extension

dog:

watchdoor

}// 本來是人類小康看門

let people =

people

(name:

"小康"

)people.

watchdoor()

// 看到狗兒旺財來了

let dog =

dog(name:

"旺財"

)// 然後委託旺財來看門

people.delegate = dog

// 現在是旺財在看門

people.delegate?

.watchdoor()

/** 小康看門

旺財看門

*/

iOS開發Swift篇 (七)函式

一 函式的定義 1 函式的定義格式 1 func 函式名 形參列表 返回值型別 2 形參列表的格式 形參名1 形參型別1,形參名2 形參型別2,3 舉例 計算2個整數的和 1 func sum num1 int,num2 int int 4 沒有返回值的函式 如果函式沒有返回值,有3種寫法 1 fu...

iOS開發Swift篇 (九)屬性

ios開發swift篇 九 屬性 一 類的定義 swift與objective c定義類的區別 objective c 一般需要2個檔案,1個.h宣告檔案和1個.m實現檔案 swift 只需要1個.swift檔案 swift中類的定義格式 1 class 類名 二 屬性 1.什麼是屬性 swift中...

iOS開發Swift篇 (八)函式 2

一 函式型別 函式型別也是資料型別的一種,它由形參型別和返回值型別組成,格式是 形參型別列表 返回值型別 1 func sum num1 int,num2 int intsum函式的函式型別是 int,int int 1 func printline 2printline函式的函式型別有4種表示方法...