<分区>
如果我定义一个带有类型约束的协议(protocol):
Protocol Fooable where Self: UIView {}
为什么 UIView
的属性和方法不能在任何符合 Fooable
的东西上直接访问?
例如:
func test(foo: Fooable) {
foo.frame = .zero // doesn't compile because `frame` isn't part of `Fooable`
}
由于协议(protocol)签名中的类型限制,编译器难道不应该知道 Fooable
现在实际上是 Fooable & UIView
吗?
这显然可以通过以下方式实现:
typealias Foo = UIView & Fooable//现在使用 Foo 作为函数参数的类型
但我更好奇为什么会这样。