gpt4 book ai didi

swift - 检查 `Any` 值是否为对象

转载 作者:搜寻专家 更新时间:2023-10-31 23:07:39 25 4
gpt4 key购买 nike

我惊讶地发现这个条件总是成立的:

let foo: Any = 4
if let object = foo as? AnyObject {
print("It's an object.")
//do something with `object` that requires reference semantics
} else {
print("It's not an object.")
}

看来无论foo原本是什么类型,都被转换成了对应类的实例。有没有一种可靠的方法来确定 foo 是否是一个对象?

最佳答案

更新

我在下面显示的代码被报告为在发布版本中不起作用。(请参阅下面 Paul Cantrell 的评论。)

为我的“据我测试”道歉太有限了。

当我找到有关此的更多信息时,我会更新此答案。


我不确定我们能否在下一个测试版(或 GM 或已发布版本...)中看到这种行为,但这在 Xcode 8 beta 6 中可以正常工作。

let foo: Any = 4
if type(of: foo) is AnyClass {
print("It's an object.")
let object = foo as AnyObject
//do something with `object` that requires reference semantics
} else {
print("It's not an object.") //->It's not an object.
}

class MyClass {}
let bar: Any = MyClass()
if type(of: bar) is AnyClass {
print("It's an object.") //->It's an object.
let object = foo as AnyObject
//do something with `object` that requires reference semantics
} else {
print("It's not an object.")
}

let baz: Any = Array<AnyObject>()
if type(of: baz) is AnyClass {
print("It's an object.")
let object = foo as AnyObject
//do something with `object` that requires reference semantics
} else {
print("It's not an object.") //->It's not an object.
}

我无法检查所有可能的情况,因此可能有一些边缘情况不起作用。但据我测试,这似乎按预期工作。

关于swift - 检查 `Any` 值是否为对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48756378/

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