swift基礎之協議

2021-07-12 04:58:46 字數 4586 閱讀 9511

1、協議的定義

2、協議的語法

3、協議對屬性,方法,構造器的規定

4、協議型別

1、利用協議實現**模式

2、協議繼承

3、類的專屬協議

4、協議合成

5、協議檢查

6、協議擴充套件

協議類似於其他語言的介面,用來規定要實現的某些特定功能必須的屬性和方法

類、結構體、列舉都可以實現協議規定的方法和屬性 叫做遵循協議

使用方法:  冒號「 : 」  協議的名字

遵循多個協議,用逗號「 , 」 隔開

protocol

someprotocol

var 

canfly :

bool

//唯讀

var 

name :

string

//讀寫

var 

amplitude :

double

var 

frequency :

double}//

協議對方法的規定

要求實現特定的例項方法或者類方法,不支援引數預設值

例項方法,

只需要指定函式名,引數,返回值 不需要括號

protocol 

flyprotocol

型別方法

相當於oc類方法 需要在方法名前加 static

protocol

someprotocol

構造器  遵循構造器必須 使用 必須關鍵字 required 

protocol

someprotocol

protocol

someprotocol    

//屬性

varage :

intfunc

fun(value:

string

) ->

string

//例項方法

static

func

fun2(value:

string

) ->

string

//型別方法

init

(name:

string

)                      

//構造器

}

實現協議

class

someclass:

someprotocol

static 

func

fun2(value:

string

) ->

string

required 

init

(name:

string)

} 協議的型別

protocol

protocol

class

a:protocol

class

b:protocol

vara =a()

varb =b()

vartypearray:[

protocol

] = [a,

b]typearray

.dynamictype

foritem

intypearray

else

iflet

two = itemas?

b }

例項中提供的功能,實際上是內部引用的其他例項實現的

可以用來實現 傳送請求,寫入資料可等 非常靈活

//定義協議

protocol

oneprotocol

//實現協議

class

oneclassdelegate:

oneprotocol

}//定義協議型別,呼叫**協議的方法

class

myclassmake

}var

myclassmake =

myclassmake

()//例項類

amyclassmake

.delegate

=oneclassdelegate

()///

類裡面協議屬性

是乙個繼承協議的例項類

bmyclassmake

.logmessage

("hello world"

) //a

呼叫自身的方法,裡面呼叫的是協議的方法

輸出:輸出資訊

hello world

//b類在其中就是協議

的**實現,

a類就呼叫

b類裡面**方法

乙個協議繼承另乙個協議,相當於定義了父協議中的屬性和方法

protocol

fatherprotocol

protocol

sonprotocol :

fatherprotocol

實現協議

class

useprotocol:

sonprotocol

func

sonfunction(value:

string

) ->

string

}只用類才能實現的協議,在協議後面繼承 關鍵字 class

表明這個協議就就表明只能有類去實現,使用結構體實現就會失敗

protocol

classonlyprotocol :

class

,sonprotocol

class

onlyclass:

classonlyprotocol

func

sonfunction(value:

string

) ->

string

}協議的合成並不會生成乙個新的型別,而是將多個協議合成乙個臨時的協議,超出範圍就會立即失效

vardsadsa :

protocol

<

oneprotocol

,twoprotocol

> 這就是乙個合成的臨時的協議

protocol

oneprotocol

}protocol

twoprotocol

}struct

mycar:

oneprotocol

,twoprotocol

這個函式裡面的引數就是乙個合成的臨時協議

func

testcomponseprotocol(type:

protocol

<

oneprotocol

,twoprotocol

>)

varmycar =

mycar()

testcomponseprotocol

(mycar)   

輸出:

30 50

使用 is  檢查型別返回bool值 當然也能檢查是否遵循某個協議

mycar 

is oneprotocol

結果返回true,因為它繼承了oneprotocol

使用協議擴充套件的方式可以為遵循者提供方法或者屬性的實現

通過這個方式可以讓我們無需每個遵循者都實現一次,無需使用全域性函式

a、還可以為擴充套件提供乙個預設的實現,

b、為協議的擴充套件新增限制條件

擴充套件的語法

使用 關鍵字where ,

self  

注意不是

self,

首字母大寫,裡面函式實現使用 self

protocol

oneprotocol

}protocol

twoprotocol }

//新增預設的實現

extension

oneprotocol}}

extension

twoprotocol}

//新增乙個限制條件

使用 關鍵字

where ,

self  注意不是self,首字母大寫,裡面函式實現使用 self

extension 

oneprotocol 

where 

self

:twoprotocol

}struct

mycar:

oneprotocol

,twoprotocol

func

testcomponseprotocol(type:

protocol

<

oneprotocol

,twoprotocol

>)

varmycar =

mycar()

testcomponseprotocol

(mycar)

輸出: 20 60

mycar

.maxspeed

//60

mycar

.topspeed

//20

mycar

.isspeedbigger()//true

Swift 基礎入門 協議 閉包

協議 protocol 當協議中有可選實現方法時 該協議前要用關鍵字 objc 修飾,可選實現方法前,用 optional 修飾 objc protocol marrydelegate 必須要實現的 protocol dividdelegate class man person marrydeleg...

Swift中協議的基礎知識

在swift中,協議用於統一方法和屬性,或者說協議是特定的方法和屬性的集合,但是它本身並沒有實現,它只有宣告,具體的實現是由其它遵守該協議的主體來執行的。類 結構體和列舉在宣告的時候,都可以遵守乙個或者多個協議,並實現協議所要求的屬性或者方法。協議的格式一般為 定義協議 protocol 協議名 遵...

swift學習之基礎語法

一 swift的基本語法 下面來介紹swift的基本用法 在main.swift中的 import foundation println hello,world println 你好,世界!定義乙個常量,使用關鍵字 let 在swift中,幾乎對所有的基本資料型別或者是物件型別使用結構體進行了重寫 ...