标签:
协议不同于继承、扩展。继承是需要对子类继承或复写。扩展是对系统给的类进行扩展,而协议是写好一个东西,各个方法和结构体都去实现它的方法和属性。
1.协议-属性
protocol SomeProtocol{
var mustBeSettable:Int {set get}
var doesNotNeedToBrStttabe:Int {get} //支读
static var someTypeProperty:Int {get set} //静态属性
}
protocol FullyNamed{
var fullName:String {get}
}
struct Person:FullyNamed {
var fullName:String
}
let john = Person(fullName: "John Appleseed")
2.协议-方法
protocol RandomNumberGenerator{
func random() -> Double
}
class Linear:RandomNumberGenerator {
var lastRandom = 42.0
let m = 139968.0
let a = 3877.0
let c = 29573.0
func random() -> Double {
lastRandom = ((lastRandom*a+c)%m)
return lastRandom/m
}
}
let generator = Linear()
print("\(generator.random())")
3.将协议当作类型使用
把协议当做类型来使用,在java或C++中称为多态
class Dice{
let sides:Int
let generatot:RandomNumberGenerator
init(sides:Int,generator:RandomNumberGenerator){
self.sides = sides
self.generatot = generator
}
func roll() -> Int{
return Int(generatot.random() * Double(sides)) + 1
}
}
var d6 = Dice(sides: 6, generator: Linear()) //实例的时候不能实例协议,要实例遵守洗衣的类
for _ in 1...5
{
print("\(d6.roll())")
}
标签:
原文地址:http://my.oschina.net/u/2346786/blog/523452