码迷,mamicode.com
首页 > 其他好文 > 详细

协议(protocol)

时间:2015-10-29 13:39:40      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:

协议不同于继承、扩展。继承是需要对子类继承或复写。扩展是对系统给的类进行扩展,而协议是写好一个东西,各个方法和结构体都去实现它的方法和属性。

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())")
}


协议(protocol)

标签:

原文地址:http://my.oschina.net/u/2346786/blog/523452

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!