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。

相关文章

  • swift3.0:associatedtype

    E文:https://developer.apple.com/library/content/documentat...

  • Swift 小札

    associatedtype associatedtype用于在protocol中代指一个确定类型并要求该类型实现...

  • associatedtype

    从字面上来理解,就是相关类型。意思也就是被associatedtype关键字修饰的变量,相当于一个占位符,而不能表...

  • Swift associatedtype

    在协议中除了定义属性和方法外,我们还能定义类型的占位符,让实现协议的类型来指定具体的类型。 添加 associat...

  • Swift3.0 - 属性

    Swift3.0 - 真的很简单Swift3.0 - 数据类型Swift3.0 - ArraySwift3.0 -...

  • Swift3.0 - 镜像

    Swift3.0 - 真的很简单Swift3.0 - 数据类型Swift3.0 - ArraySwift3.0 -...

  • Swift3.0 - 真的很简单

    Swift3.0 - 真的很简单Swift3.0 - 数据类型Swift3.0 - ArraySwift3.0 -...

  • Swift3.0 - Array

    Swift3.0 - 真的很简单Swift3.0 - 数据类型Swift3.0 - ArraySwift3.0 -...

  • Swift3.0 - 泛型

    Swift3.0 - 真的很简单Swift3.0 - 数据类型Swift3.0 - ArraySwift3.0 -...

  • Swift3.0 - 数据类型

    Swift3.0 - 真的很简单Swift3.0 - 数据类型Swift3.0 - ArraySwift3.0 -...

网友评论

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

本文标题:swift3.0:associatedtype

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