【发布时间】:2016-09-05 23:18:21
【问题描述】:
我在Int 上写了一个扩展,如下所示。
extension Int {
func squared () -> Int {
return self * self
}
}
print(10.squared()) // works
上面的代码有效。现在我想扩展IntegerType 协议,以便 Int、UInt、Int64 等都符合。我的代码如下。
extension IntegerType {
func squared () -> IntegerType { // this line creates error
return self * self
}
}
我得到错误:
Protocol 'IntegerType' 只能用作通用约束,因为它具有 Self 或关联的类型要求
我已经看过this问题及其视频和this问题,还是看不懂。我只知道有一些associatedType 在这种情况下是Self 但无法连接点。我觉得我对Generics 主题缺乏了解也是一个原因......
有人可以详细说明一下这个主题吗?为什么扩展会产生错误?
【问题讨论】:
-
另外,请务必查看this Medium post,它提供了关于该问题的出色见解。
标签: swift generics protocols self protocol-extension