swift3.0:associatedtype

作者: 为幸福而奋斗2016 | 来源:发表于2016-10-25 11:07 被阅读2044次

    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的类型推断,你实际上并不需要声明一个具体ItemType的Int作为定义的一部分IntStack。由于IntStack符合所有的要求Container协议,swift可以推断出适当的ItemType使用,只需通过查看类型append(_:)方法的item参数和标的返回类型。事实上,如果你删除typealias ItemType = Int上面从代码行,一切仍然有效,因为很明显应该使用什么类型ItemType。

    相关文章

      网友评论

      • Ashen_:这难道是协议中的泛型?

      本文标题:swift3.0:associatedtype

      本文链接:https://www.haomeiwen.com/subject/ytjruttx.html