gpt4 book ai didi

swift - 如何打开类型

转载 作者:可可西里 更新时间:2023-10-31 23:59:40 25 4
gpt4 key购买 nike

我想在给定协议(protocol)的类型上做一个 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。 (可能还有其他方法,但我暂时没想到。)

关于swift - 如何打开类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52261786/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com