swift3.0:associatedtype


E文:https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Generics.html

associatedtype用於protocol中 associatedtype類型是在protocol中代指一個確定類型並要求該類型實現指定方法

比如 我們定義一個protocol

protocol Container {
    associatedtype ItemType
    mutating func append(_ item: ItemType)
    var count: Int { get }
    subscript(i: Int) -> ItemType { get }
}

  之后實現這個協議

struct IntStack: Container {
    // original IntStack implementation
    var items = [Int]()
    mutating func push(_ item: Int) {
        items.append(item)
    }
    mutating func pop() -> Int {
        return items.removeLast()
    }
    // conformance to the Container protocol
    typealias ItemType = Int
    mutating func append(_ item: Int) {
        self.push(item)
    }
    var count: Int {
        return items.count
    }
    subscript(i: Int) -> Int {
        return items[i]
    }
}

 其中items實現了ItemType這個代指變量

由於swift的類型推斷,你實際上並不需要聲明一個具體ItemTypeInt作為定義的一部分IntStack由於IntStack符合所有的要求Container協議,swift可以推斷出適當的ItemType使用,只需通過查看類型append(_:)方法的item參數和標的返回類型。事實上,如果你刪除typealias ItemType = Int上面從代碼行,一切仍然有效,因為很明顯應該使用什么類型ItemType


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM