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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 4,137评论 1 10
  • 136.泛型 泛型代码让你可以写出灵活,可重用的函数和类型,它们可以使用任何类型,受你定义的需求的约束。你可以写出...
    无沣阅读 1,639评论 0 4
  • 原文:Generics Manifesto -- Douglas Gregor 译者注 在我慢慢地深入使用 Swi...
    kemchenj阅读 2,399评论 0 6
  • 类型 在Swift中,有两种类型:命名型类型和复合型类型。命名型类型是在定义时可以给定的特定名字的类型。命名型类型...
    silly鸿阅读 746评论 0 0
  • 生活像是永远都停不下来的车轮,每一个上了车的人,只有拼命的学会去驾驭它—— 最近准备搬家,偶然发现了一本被“尘封”...
    肥宅大学士阅读 457评论 0 2

友情链接更多精彩内容