首页 > 代码库 > Swift协议(Protocol)

Swift协议(Protocol)

协议是为方法、属性等定义一套规范,没有具体的实现。

协议能够被类、结构体等具体实现(或遵守)。

 

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