为什么一个typealias使我的表达明确无误?

时间:2017-02-13 19:30:48

标签: swift

在下面的代码中,当我直接引用Byte array resource [resource loaded from byte array] cannot be resolved to URL 而不是使用C.ID typealias时,我得到一个错误,"表达式的类型是不明确的,没有更多的上下文"。如果它们都引用相同的类型,为什么会使它变得模棱两可?

使用ID并不是一个非常不方便的解决方法,但我确实发现错误令人困惑。

typealias

1 个答案:

答案 0 :(得分:0)

来自Swift Documentation

  

关联类型为占用协议一部分的类型提供占位符名称。在采用协议之前,不会指定用于该关联类型的实际类型。

如果没有在类中指定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