【发布时间】:2017-09-19 14:01:15
【问题描述】:
在 Swift 中,从技术角度来看,为什么编译器会关心协议是否只能用作泛型约束?
说我有:
protocol Fooable {
associated type Bar: Equatable
func foo(bar: Bar) {
bar==bar
}
}
为什么我以后不能声明一个将 Fooable 对象作为参数的函数?
在我看来,编译器应该只关心给定的 Fooable 是否可以发送一个带有参数“bar”的消息“foo”,该参数是一个 Equatable,因此响应消息“==”。
我知道 Swift 是静态类型的,但是为什么 Swift 还要真正关心这种情况下的类型,因为唯一重要的是给定的 message 是否可以有效地发送到对象?
我正试图了解这背后的原因,因为我怀疑一定有充分的理由。
【问题讨论】:
-
比较stackoverflow.com/q/41695792/2976878;简而言之,具有关联类型/
Self要求的协议不能用作实际类型是没有真正原因的。
标签: swift