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中,幾乎對所有的基本資料型別或者是物件型別使用結構體進行了重寫 ...