如何打开Type

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何打开Type相关的知识,希望对你有一定的参考价值。

我想在给定协议的类型上做一个switch语句。让我们说:

protocol A {}

struct SA: A {}
struct SB: A {}

let aself: A.Type = SA.self
let bself: A.Type = SB.self

switch aself {
case is SA:
    break
default:
    break
}

我可以以某种方式使这种开关工作?这让我警告说这种转换总是失败。这可以以某种方式完成吗?

答案

你可以写这样的东西:

switch aself {
case is SA.Type:
    print("is SA.Type")
default:
    print("Unknown type")
}

或这个:

switch ObjectIdentifier(aself) {
case ObjectIdentifier(SA.self):
    print("is SA.Type")
default:
    print("Unknown type")
}

(一些代码解释了子类的不同行为,如下所述。)

class CA: A {}
class CAA: CA {}

let caaself: A.Type = CAA.self

switch caaself {
case is CA.Type:
    print("is CA.Type") //->is CA.Type
default:
    print("Unknown type")
}

switch ObjectIdentifier(caaself) {
case ObjectIdentifier(CA.self):
    print("is CA.Type")
default:
    print("Unknown type") //->Unknown type
}

如果要在类型匹配中排除子类,可能需要使用ObjectIdentifier。 (可能有其他方式,但我现在没有想到。)

另一答案

我假设你也想要使用铸造类型值,在这种情况下你可以使用一些模式匹配:

switch aself {
case let a as SA.Type:
    break
default:
    break
}

如果您不想使用铸造值:

switch aself {
case let _ as SA.Type:
    break
default:
    break
}

以上是关于如何打开Type的主要内容,如果未能解决你的问题,请参考以下文章

linux打开终端如何启动scala,如何在终端下运行Scala代码片段?

如何在 Reactjs 中添加丰富的代码片段?

如何在 Recyclerview Item Click 上打开新片段?

如何在 Activity(非 AppCompatActivity)中打开片段?

如何在recyclerview不同的项目点击上打开几个不同的片段?

如何在 BottomNavigationView 的片段上打开搜索界面?