快速检查对象类型

标签 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
}

如何查看参数的类型?

最佳答案

您可以使用

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

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

相关文章:

c# - 如何使用单例进行继承

java - 从子类获取父类

swift - Swift 中不再有 `private init` 了吗?

ios - 从 Today Widget 访问 Swift 代码

java - java问题中的泛型数组

c# - 如何模式匹配通用类型

Java子类构造函数不调用父类构造函数

ios - Swift iOS - API 数据和缓存

ios - Swift 相当于 "[[transferManager download:downloadRequest] continueWithExecutor:[AWSExecutor mainThreadExecutor] withBlock:^id(AWSTask *task)"

c# - 为什么 C# 不能正确绑定(bind)泛型覆盖方法?