协议是为方法、属性等定义一套规范,没有具体的实现。html
协议可以被类、结构体等具体实现(或遵照)。dom
[html] view plaincopyide
protocol SomeProtocol { spa
// protocoldefinition goes here .net
} code
struct SomeStructure: FirstProtocol, AnotherProtocol { orm
// structure definition goes here} htm
class SomeClass: SomeSuperclass, FirstProtocol, AnotherProtocol { blog
// class definitiongoeshere ip
}
属性
1. set 和 get 访问器
[html] view plaincopy
protocol SomeProtocol {
var mustBeSettable:Int { get set }
var doesNotNeedToBeSettable: Int { get }
}
2.静态属性
[html] view plaincopy
protocol AnotherProtocol {
class var someTypeProperty: Int { get set }
}
3.只读
[html] view plaincopy
protocol FullyNamed {
var fullName: String { get }
}
实例:
[html] view plaincopy
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.定义方法
[html] view plaincopy
protocol RandomNumberGenerator{
func random() -> Double
}
2.定义静态方法
[html] view plaincopy
protocolSomeProtocol {
class func someTypeMethod()
}
实例:
[html] view plaincopy
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"
把协议做为类型使用
[html] view plaincopy
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