为什么我们可以使用 Error 协议作为泛型类型?

Chr*_*ler 4 generics ios swift

为什么协议可能会出错?对于任何其他协议,我们都会收到错误

protocol SomeProtocol {

}

struct Test1<T> where T: SomeProtocol {

}

struct Test2<T> where T: Error {

}

let test1: Test1<SomeProtocol> = Test1() ----> Protocol 'SomeProtocol' as a type cannot conform to the protocol itself
let test2: Test2<Error> = Test2() ----> It's Ok
Run Code Online (Sandbox Code Playgroud)

Swe*_*per 6

这只是规则中的一个例外。它记录在这里

例外情况

当用作类型时,Swift 协议Error符合自身;@objc没有静态要求的协议也可以用作符合自身的类型。

如果不是这个异常,您将无法执行Result<T, Error>AnyPublisher<T, Error>说出“可能是任何错误的某些结果”或“可能发出任何错误的发布者”。