Generic

A Non-Generic Stack Structure

假設我們建立一個 Intstack,可以 push, pop stake 中的元素:

struct IntStack {
   var elements = Int[]()

   mutating func push(element: Int) {
       elements.append(element)
   }

   mutating func pop() -> Int {
       return elements.removeLast()
  }
}

這很方便,但是只有 Int 才能放到 IntStack 中。如果我們想要有 Double, Point, Characterstack,就要對每一種型態都建立一個 stack class,這看起來不是這麼的有效率。

A Generic Stack Structure

終於!!! Finally!!! 在開發 iOS 時有泛型可以用了!!!

<T> 當做泛型的語法,並且在任何宣告型態的地方換成 T

struct Stack<T> {
   var elements = T[]()

   mutating func push(element: T) {
       elements.append(element)
   }

   mutating func pop() -> T {
       return elements.removeLast()
  }
}

如此一來,我們就可以放入任何型態的物件了:

struct Stack<T> {
   ...
}

var intStack = Stack<Int>()
intStack.push(50)
let lastIn = intStack.pop()
// lastIn is 50

var stringStack = Stack<String>()
stringStack.push("Hello")
println(stringStack.pop())
// output: Hello

小結

WWDC 2014 的課程 Introduction to Swift 的到這裡已經結束。期待接下來其他更進階的課程吧!

Back to: Home