协议是为方法、属性等定义一套规范,没有具体的实现。
协议能够被类、结构体等具体实现(或遵守)。
- 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