gpt4 book ai didi

swift - 如何从 Swift 中的可选类型获取解包类型?

转载 作者:搜寻专家 更新时间:2023-10-31 22:14:20 24 4
gpt4 key购买 nike

我试图在运行时从可选类型中获取解包类型。以下代码会将 a 的类型打印为 Optional<String> .

class MySubClass: MyClass {

var a: String? = nil
}

var a = MySubClass()

let mirror = Mirror(reflecting: a)
for child in mirror.children {
print(child.value.dynamicType)
}

现在我想打开类型并得到 String ,我应该怎么做才能在运行时发生这种情况?

最佳答案

假设你有一个可选的

let someVar: String?

然后 print(type(of: someVar)) 将打印

Optional<String>

但如果您将以下扩展添加到 Optional

protocol OptionalProtocol {
func wrappedType() -> Any.Type
}

extension Optional: OptionalProtocol {
func wrappedType() -> Any.Type {
return Wrapped.self
}
}

然后 print(someVar.wrappedType()) 将打印

String

没有任何反射(reflect)


总结

只要可选项未被AnyAnyObject 引用,代码就可以正常工作。

对于 Any,您必须先将其转换为 OptionalProtocol。运行

let someVar: String?
let anyVar = someVar as Any

if let op = anyVar as? OptionalProtocol {
print(op.wrappedType())
}

将打印

String


至于 AnyObject,奇怪的是(至少对我而言),它不会转换为 OptionalProtocol


可以找到原始的 StackOverflow 答案 here

关于swift - 如何从 Swift 中的可选类型获取解包类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34115668/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com