发布于 2015-06-14 01:59:48 | 59 次阅读 | 评论: 0 | 来源: 网络整理

方法要求

协议能够要求其遵循者必备某些特定的实例方法类方法。协议方法的声明与普通方法声明相似,但它不需要方法内容。


注意: 协议方法支持变长参数(variadic parameter),不支持默认参数(default parameter)
 

前置class关键字表示协议中的成员为类成员;当协议用于被枚举结构体遵循时,则使用static关键字。如下所示:


protocol SomeProtocol {
    class func someTypeMethod()
}

protocol RandomNumberGenerator {
    func random() -> Double
}

RandomNumberGenerator协议要求其遵循者必须拥有一个名为random, 返回值类型为Double的实例方法。(我们假设随机数在[0,1]区间内)。

LinearCongruentialGenerator遵循RandomNumberGenerator协议,并提供了一个叫做线性同余生成器(linear congruential generator)的伪随机数算法。


class LinearCongruentialGenerator: 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 = LinearCongruentialGenerator()
println("Here's a random number: (generator.random())")
// 输出 : "Here's a random number: 0.37464991998171"
println("And another one: (generator.random())")
// 输出 : "And another one: 0.729023776863283"
最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务