Swift检查对象的类型

时间:2016-07-27 14:57:07

标签: swift generics inheritance types

我想在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
}

如何查看参数的类型?

1 个答案:

答案 0 :(得分:2)

您可以使用

检查类型
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 }