【发布时间】:2019-05-20 17:32:26
【问题描述】:
当我有一个符合协议的类的可选值时,类型检查不会按预期工作。例如:
import Foundation
protocol MyProtocol { }
class MyClass: MyProtocol { }
let myClass: MyClass = MyClass()
let myClassType = type(of: myClass)
print("myClassType is MyClass.Type: \(myClassType is MyClass.Type)")
print("myClassType is MyProtocol.Type: \(myClassType is MyProtocol.Type)")
let myClassOpt: MyClass? = MyClass()
let myClassTypeOpt = type(of: myClassOpt)
print("myClassTypeOpt is MyClass?.Type: \(myClassTypeOpt is MyClass?.Type)")
print("myClassTypeOpt is MyProtocol?.Type: \(myClassTypeOpt is MyProtocol?.Type)")
输出:
myClassType 是 MyClass.Type: true
myClassType 是 MyProtocol.Type: true
myClassTypeOpt 是 MyClass?.Type: true
myClassTypeOpt 是 MyProtocol?.Type: false
最后一次类型检查的预期值为真,但结果为假。
在这种情况下,还有其他方法可以检查类型吗?
【问题讨论】:
-
当你说“另一种检查类型的方法”时,是为了做什么?如果这确实按照您的想法工作,下一个代码块会是什么样子?这几乎肯定可以用另一种方式更好地解决。
标签: swift typechecking