如何在 Swift中检查类型是否为Optional? 假设我有一个PartialKeyPath类型的变量,其中: struct Foo { let bar: String let baz: String?}typealias PropertyRoot = (key: PartialKeyPathRoot, value: Any?)typealias PropertiesRo
假设我有一个PartialKeyPath类型的变量,其中:
struct Foo { let bar: String let baz: String? } typealias Property<Root> = (key: PartialKeyPath<Root>, value: Any?) typealias Properties<Root> = [Property<Root>]
现在说我通过一个Properties实例迭代:
properties.forEach { prop in let valueType1 = type(of: prop.key).valueType let valueType2 = type(of: value) ...
我如何在此处检查valueType1是否为Optional< valueType2>,或者它是否为可选的其他任何风格?
到目前为止,我找到的唯一方法真的很难看……
这是一个hacky但工作的解决方案:func isOptional(_ type: Any.Type) -> Bool { let typeName = String(describing: type) return typeName.hasPrefix("Optional<") }
测试:
let t1 = Int?.self let t2 = Bool.self print(isOptional(t1)) // true print(isOptional(t2)) // false