例如,我们有var check: Int?
,我们希望print(String(describing: type(of: check)))
。我们进入控制台Optional<Int>
如何获得Int
?
答案 0 :(得分:1)
您可以使用!
运算符解包Optional:
print(String(describing: type(of: check!)))
答案 1 :(得分:1)
我刚刚遇到了同样的问题。如果在运行时 check
不是 nil
,您可以简单地解开它并执行 type(of:)
,例如:
if let unwrappedCheck = check {
print(type(of: unwrappedCheck) // "Int"
}
但是,如果在运行时检查是 nil
并且您希望 type(of: check)
给您 Int
而不是 Optional<Int>
怎么办?经验证的答案不正确,因为它会在运行时抛出异常。我认为这是一个错误——如果你解包的东西 (type(of:)
) 为零,你不能强制解包并执行 check
。
因为您静态地知道 check
是 Int?
类型,所以这很容易。您只需要一种方法来公开 Optional 的包装类型。请参阅 Optional
的 official declaration:
@frozen enum Optional<Wrapped>
<块引用>
Optional 类型是一个枚举,有两种情况。 Optional.none 相当于 nil 文字。 Optional.some(Wrapped) 存储一个包装的值。
由于 Optional 在技术上是一个枚举,您可以使用一个简短的扩展名来转发 Wrapped
的类型。
extension Optional {
typealias Wrapped = Wrapped
}
然后你可以这样使用它:
let check: Int? = nil
let wrappedType = type(of: check).Wrapped
print(wrappedType) // "Int"