我想比较一下swift中的对象类型。
我有一个函数,它以NSError的一个对象作为参数。它应该返回一个自定义字符串。
看起来是这样的:

static func getLocalizedErrorText(error: NSError) -> String{
    switch error {
        case is NoConnection: //class NoConnection: NSError
            return "....."
        ...
}

但功能并没有按预期工作。我认为主要的问题是这个例子不起作用:
var dummy = MySubError() //class MySubError: MyBaseError
var dummy2: MyBaseError?
dummy2 = MySubError()

if dummy.dynamicType == MySubError.self {
        //This will work
}

if dummy2.dynamicType == MySubError.self {
        //This will not work
}

如何检查参数的类型?

最佳答案

您可以使用

if error is MySubError {
    // do stuff
}

您还可以执行可选的强制转换,如果类型匹配,则强制转换将成功;如果不匹配,则返回nil:
let subError = error as? MySubError

也可以在guard谓词或if let语句中使用:
if let subError = error as? MySubError {
    // do stuff
}


guard let subError = error as? MySuberror else { return }

关于swift - 快速检查对象类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38616565/

10-11 21:13