我试图为我的通用枚举编写一个初始化程序,它使用Alamofire的通用结果枚举并将其转换为我自己的结果类型。我提出的是以下内容:
public enum Result<Value, Error: ErrorType> {
case Success(Value)
case Failure(Error)
public init(result: Alamofire.Result) {
switch(result) {
case Alamofire.Result.Success(let val):
self = MyFramework.Result.Success(val)
case Alamofire.Result.Failure(let err):
self = MyFramework.Result.Failure(err)
}
}
}
但是我遇到了以下错误:
Cannot invoke 'Success' with an argument list of type '(Value)'
答案 0 :(得分:2)
这似乎是编译器推断Alamofire.Result
的泛型参数的方式的问题。
您可以通过更改
来修复它init(result: Alamofire.Result) {
到
init(result: Alamofire.Result<Value, Error>) {
这样,显式指定了泛型参数(与Result类型的参数相同)。
我还建议你file a bug,因为这给出的错误信息非常无益。
答案 1 :(得分:0)
正如jtbandes建议的那样,明确指定泛型参数类型可以消除神秘的编译器错误。但是,一旦解决了这个问题,我就会遇到更加神秘的错误。
经过一些游戏后,删除对MyFramework
的引用似乎无论出于何种原因解决了段错误。以下代码编译良好:
public enum Result<Value, Error: ErrorType> {
case Success(Value)
case Failure(Error)
public init(result: Alamofire.Result<Value, Error>) {
switch(result) {
case Alamofire.Result.Success(let val):
self = .Success(val)
case Alamofire.Result.Failure(let err):
self = .Failure(err)
}
}
}