Swift協議(Protocol)

來源:互聯網
上載者:User

標籤:swift   ios   swift視頻   swift教程   ios8   

協議是為方法、屬性等定義一套規範,沒有具體的實現。

協議能夠被類、結構體等具體實現(或遵守)。

 

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: Stringinit(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.0let a = 3877.0 let c = 29573.0funcrandom() -> 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.0let a = 3877.0 letc = 29573.0func random() -> Double {lastRandom = ((lastRandom * a + c) %m) return lastRandom / m}}class Dice { letsides: Intlet 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



相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.