您的位置:首页 > 移动开发 > Swift

Swift协议(Protocol)

2016-02-02 21:31 330 查看
协议是为方法、属性等定义一套规范。没有详细的实现。

协议可以被类、结构体等详细实现(或遵守)。

protocol SomeProtocol {
// protocoldefinition goes here
}
struct         SomeStructure:            FirstProtocol, AnotherProtocol {
// structure definition goes here}
class  SomeClass:    SomeSuperclass,     FirstProtocol, AnotherProtocol {
// class definitiongoeshere
}


属性

1. set 和 get 訪问器

protocol SomeProtocol {
var mustBeSettable:Int { get set }
var doesNotNeedToBeSettable: Int { get }
}


2.静态属性

protocol AnotherProtocol {
class var someTypeProperty: Int { get set }
}


3.仅仅读

protocol FullyNamed {
var fullName: String { get }
}


实例:

struct Person: FullyNamed {
varfullName: String
}
letjohn= Person(fullName: "John Appleseed")
class Starship: FullyNamed {
varprefix: String?
varname: String
init(name: String, prefix: String? = nil) {
self.name = name self.prefix = prefix
}
varfullName: String {
return (prefix ? prefix!+ " " :"")+ name
}
}
varncc1701 = Starship(name: "Enterprise",prefix: "USS")


方法

1.定义方法

protocol RandomNumberGenerator{
func random() -> Double
}


2.定义静态方法

protocolSomeProtocol {
class func someTypeMethod()
}


实例:

protocol RandomNumberGenerator{
funcrandom() -> Double
}
class                   LinearCongruentialGenerator:RandomNumberGenerator {
var lastRandom= 42.0let m = 139968.0
let a = 3877.0 let c = 29573.0
funcrandom() -> Double {
lastRandom = ((lastRandom * a + c) %m)
returnlastRandom / m
}
}
let generator= LinearCongruentialGenerator()
println("Here's       a        random         number:
\(generator.random())")
//    prints    "Here's     a     random       number:0.37464991998171"
println("And another one: \(generator.random())")
//prints "And another one: 0.729023776863283"


把协议作为类型使用

protocol RandomNumberGenerator {
func random() -> Double}
class LinearCongruentialGenerator: RandomNumberGenerator {
varlastRandom= 42.0 let m =139968.0
let a = 3877.0 letc = 29573.0
func random() -> Double {
lastRandom = ((lastRandom * a + c) %m)
return lastRandom / m
}
}
class Dice {
letsides: Int
let generator: RandomNumberGenerator
init(sides: Int, generator: RandomNumberGenerator) {
self.sides = sidesself.generator = generator
}
func roll() -> Int{
return Int(generator.random() * Double(sides)) + 1
}
}
vard6 = Dice(sides: 6, generator: LinearCongruentialGenerator())
for_ in 1...5 {
println("Randomdiceroll is \(d6.roll())")
}


Swift交流讨论论坛论坛:http://www.cocoagame.net

欢迎增加Swift技术交流群:362298485
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: