位置:首頁 > 高級語言 > Swift教學 > Swift協議類型

Swift協議類型

協議類型

協議本身不實現任何功能,但你可以將它當做類型來使用。

使用場景:

  • 作為函數,方法或構造器中的參數類型,返回值類型
  • 作為常量,變量,屬性的類型
  • 作為數組,字典或其他容器中的元素類型


注意: 協議類型應與其他類型(Int,Double,String)的寫法相同,使用駝峰式。
 

class Dice {
    let sides: Int
    let generator: RandomNumberGenerator
    init(sides: Int, generator: RandomNumberGenerator) {
        self.sides = sides
        self.generator = generator
    }
    func roll() -> Int {
        return Int(generator.random() * Double(sides)) +1
    }
}

這裡定義了一個名為 Dice的類,用來代表桌遊中的N個麵的骰子。

Dice含有sidesgenerator兩個屬性,前者用來表示骰子有幾個麵,後者為骰子提供一個隨機數生成器。由於後者為RandomNumberGenerator的協議類型。所以它能夠被賦值為任意遵循該協議的類型。

此外,使用構造器(init)來代替之前版本中的setup操作。構造器中含有一個名為generator,類型為RandomNumberGenerator的形參,使得它可以接收任意遵循RandomNumberGenerator協議的類型。

roll方法用來模擬骰子的麵值。它先使用generatorrandom方法來創建一個[0-1]區間內的隨機數種子,然後加工這個隨機數種子生成骰子的麵值。

如下所示,LinearCongruentialGenerator的實例作為隨機數生成器傳入Dice構造器

var d6 = Dice(sides: 6,generator: LinearCongruentialGenerator())
for _ in 1...5 {
    println("Random dice roll is \(d6.roll())")
}
//輸出結果
//Random dice roll is 3
//Random dice roll is 5
//Random dice roll is 4
//Random dice roll is 5
//Random dice roll is 4