微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Swift中检查类型是否为Optional?

如何在 Swift中检查类型是否为Optional?

假设我有一个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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐