无法将[SubclassOfErrorType]转换为预期类型[ErrorType]

时间:2016-10-06 07:50:37

标签: ios swift polymorphism nserror

我有一个自定义ErrorType,如下所示:

struct RGOServerValidationChallenge: ErrorType {
    var message: String
    var fieldIdentifier: String

    init(message: String, fieldId: String) {
        self.message = message
        self.fieldIdentifier = fieldId
    }
}

表示我从API调用中获得的结果的枚举,无论是成功还是失败:

enum RGOResult {
    case Success(AnyObject?)
    case Failures([ErrorType])
}

正如您所看到的,Failures案例采用ErrorType数组的参数。

但是,当我尝试将RGOServerValidationChallenge数组传递给此枚举时,编译器会抛出以下错误:

Cannot convert value of type '[RGOServerValidationChallenge]' to expected argument type '[ErrorType]'

我不确定为什么会发生这种情况,因为RGOServerValidationChallengeErrorType的子对象,所以多态性应该允许我在没有强制转换的情况下传递值。

修改

我在同一个文件中制作了一个随机协议,并使RGOServerValidationChallenge符合它而不是ErrorType。然后我编辑了RGOResult.Failures以将这个新协议作为参数。错误仍然存​​在,这表明问题不在于ErrorType

编辑2:

有趣的是,直接传递[RGOServerValidationChallenge]个对象,但是当使用变量时,它不会。我的意思是:

这有效:

let errors = RGOResult.Failures([RGOServerValidationChallenge(message: "", fieldId: "")])

这不是:

let arr = [RGOServerValidationChallenge(message: "", fieldId: "")]
let errors = RGOResult.Failures(arr)

我完全被难过......

编辑3:

我刚刚按照Vince的建议在Swift 3游乐场跑了这个游戏,它看起来很有效。我想这只是一个在Swift 3中修补的Swift错误。看起来我只需要冒险尝试并升级我的代码库。

0 个答案:

没有答案