在下面的代码中,当我直接引用Byte array resource [resource loaded from byte array] cannot be resolved to URL
而不是使用C.ID
typealias时,我得到一个错误,"表达式的类型是不明确的,没有更多的上下文"。如果它们都引用相同的类型,为什么会使它变得模棱两可?
使用ID
并不是一个非常不方便的解决方法,但我确实发现错误令人困惑。
typealias
答案 0 :(得分:0)
关联类型为占用协议一部分的类型提供占位符名称。在采用协议之前,不会指定用于该关联类型的实际类型。
如果没有在类中指定typealias,编译器就不知道ID
是什么。因此,您需要告诉它您希望ID
使用typealias
您还可以使用类型推断告诉编译器:
protocol SomeProtocol {
associatedtype ItemType
subscript(i: Int) -> ItemType { get }
}
class SomeClass: SomeProtocol {
subscript(i: Int) -> Int {
return items[i]
}
}
这是有效的,因为在这种情况下,编译器可以推断ItemType
必须是Int
。有关详情,请参阅链接的Swift Documentation。