我正在尝试确定给定的type t(Any.Type)是否是可选类型,我正在使用此测试
t is Optional<Any>.Type
Run Code Online (Sandbox Code Playgroud)
但它总是返回false.
有没有办法实现这个目标?
Lop*_*Sae 16
假设你要做的是这样的:
let anyType: Any.Type = Optional<String>.self
anyType is Optional<Any>.Type // false
Run Code Online (Sandbox Code Playgroud)
目前可悲的是(从Swift 2开始)不支持协方差,也不支持逆向和直接类型检查Optional.Type无法完成:
// Argument for generic parameter 'Wrapped' could not be inferred
anyType is Optional.Type // Causes error
Run Code Online (Sandbox Code Playgroud)
另一种方法是Optional扩展特定协议,并检查该类型:
protocol OptionalProtocol {}
extension Optional : OptionalProtocol {}
let anyType: Any.Type = Optional<String>.self
anyType is OptionalProtocol.Type // true
Run Code Online (Sandbox Code Playgroud)
派对有点晚了.但是,我遇到了同样的问题.这是我的代码.
func isOptional(_ instance: Any) -> Bool {
let mirror = Mirror(reflecting: instance)
let style = mirror.displayStyle
return style == .optional
}
let a: Int = 1 // false
let b: Int? = 2 // true
let c: Double = 3.0 // false
let d: Double? = 4.0 // true
let e: NSString = "Hello" // false
let f: NSString? = "Hello" // true
isOptional(a) // fasle
isOptional(b) // true - warning
isOptional(c) // false
isOptional(d) // true - warning
isOptional(e) // false
isOptional(f) // true - warning
Run Code Online (Sandbox Code Playgroud)
它对我来说很好看. swift4
| 归档时间: |
|
| 查看次数: |
3103 次 |
| 最近记录: |