
Swift
1.協(xié)議的繼承
protocol Animal{
// 腿和翅膀?qū)傩?,包括get和set方法
var leg:String{get set}
var wing:String{get set}
// 描述方法,返回的是字符串
func description() -> String
}
protocol Fish:Animal {
// 習(xí)慣屬性,帶有g(shù)et和set
var habit:String{get set}
}
// Goldfish類采納Fish協(xié)議
class Goldfish:Fish{
var name:String
// 實現(xiàn)Fish的協(xié)議
var habit: String
// 實現(xiàn)Animal協(xié)議
var leg: String
var wing: String
func description() -> String {
return "name:\(name),wing:\(wing),leg:\(leg),habit:\(habit)"
}
// 構(gòu)造函數(shù)
init(name:String,habit:String,leg:String,wing:String){
self.name = name
self.habit = habit
self.leg = leg
self.wing = wing
}
}
var goldfish = Goldfish(name:"fish",habit:"喜歡水",leg:"沒有腿",wing:"沒有翅膀")
print(goldfish.description())
2.檢查協(xié)議的一致性
使用is操作符檢查實現(xiàn)實例是否采納了某個協(xié)議
使用as操作符把實例類型轉(zhuǎn)換到指定協(xié)議類型
protocol Area{
var area:Double{get}
}
// 定義采納Area協(xié)議的類Rectangle
class Rectangle:Area{
let long:Double
var area: Double{return long * long}
init(long:Double) {
self.long = long
}
}
// 定義采納了Area協(xié)議的類Circle
class Circle:Area{
let pi = 3.1415926
var radius:Double
var area: Double{return pi * radius * radius}
init(radius:Double){
self.radius = radius;
}
}
// 定義了沒有采納Area協(xié)議的類Bird
class Bird{
var wing:Int
init(wing:Int){
self.wing = wing
}
}
// 定義AnyObject類型的數(shù)組
let objects:[AnyObject] = [Circle(radius:2.0),Rectangle(long:2.0),Bird(wing:2)]
for object in objects {
if let objectWithArea = object as? Area{
print("面積是:\(objectWithArea.area)")
}else{
print("沒有面積")
}
}
3.代理模式
代理是一種設(shè)計模式,它允許類或者結(jié)構(gòu)體將自身負責(zé)的功能委托給其他類型的實例去實現(xiàn)。
// 定義一個協(xié)議GetFile
protocol GetFileDelegate{
func take() -> String // 協(xié)議方法
}
// 定義Assistant類,采用GetFile協(xié)議
class Assistant:GetFileDelegate{
func take() -> String {
return "助理給老板拿文件"
}
}
// 定義一個Boss類,它有一個代理屬性
class Boss{
var delegate:GetFileDelegate? // 聲明代理屬性,用來響應(yīng)代理方法
init(man:GetFileDelegate) {
delegate = man
}
func take() -> String {
return delegate!.take() // 實現(xiàn)代理的方法
}
}
let assistant = Assistant()
let boss = Boss(man:assistant)
print(boss.take())

協(xié)議2結(jié)果輸出