一尘不染

确定Any.Type是否可选

swift

我正在尝试确定给定类型tAny.Type)是否为可选类型,我正在使用此测试

t is Optional<Any>.Type

但它始终返回false。

那么有什么办法可以做到这一点?


阅读 257

收藏
2020-07-07

共1个答案

一尘不染

假设您要执行的操作是这样的:

let anyType: Any.Type = Optional<String>.self
anyType is Optional<Any>.Type // false

可悲的是,swift当前(从Swift
2开始)不支持协方差和协变,并且不能直接针对类型进行类型检查Optional.Type

// Argument for generic parameter 'Wrapped' could not be inferred
anyType is Optional.Type // Causes error

一种替代方法是使Optional特定协议扩展,并检查该类型:

protocol OptionalProtocol {}

extension Optional : OptionalProtocol {}

let anyType: Any.Type = Optional<String>.self
anyType is OptionalProtocol.Type // true
2020-07-07