Dam*_*ycz 2 types switch-statement swift
我想在给定协议的类型上做一个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
}
Run Code Online (Sandbox Code Playgroud)
我可以以某种方式使这种开关工作?这让我警告说这种转换总是失败.这可以以某种方式完成吗?
你可以写这样的东西:
switch aself {
case is SA.Type:
print("is SA.Type")
default:
print("Unknown type")
}
Run Code Online (Sandbox Code Playgroud)
或这个:
switch ObjectIdentifier(aself) {
case ObjectIdentifier(SA.self):
print("is SA.Type")
default:
print("Unknown type")
}
Run Code Online (Sandbox Code Playgroud)
(一些代码解释了子类的不同行为,如下所述.)
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
}
Run Code Online (Sandbox Code Playgroud)
如果ObjectIdentifier要在类型匹配中排除子类,可能需要使用.(可能有其他方式,但我现在没有想到.)
| 归档时间: |
|
| 查看次数: |
72 次 |
| 最近记录: |