在 Swift 中检查值或引用类型
Posted
技术标签:
【中文标题】在 Swift 中检查值或引用类型【英文标题】:Check for value or reference type in Swift 【发布时间】:2016-01-11 15:39:28 【问题描述】:我们如何检查函数中传递的参数是值类型还是引用类型?例如
func isReferenceType(toTest: Any)
return true // or false
正如我们看到的here,我们无法利用泛型来做到这一点。
【问题讨论】:
我没试过,但没有解决办法。 2 在您发布的链接中为您工作?is AnyObject
呢?
对于 Swift 3 和 Xcode 8 - ***.com/a/40538595/746347
【参考方案1】:
AnyObject
是任何类类型自动遵循的协议,所以你可以这样写:
func isReferenceType(toTest: Any) -> Bool
return toTest.dynamicType is AnyObject
class Foo
struct Bar
isReferenceType(Foo()) // true
isReferenceType(Bar()) // false
isReferenceType("foo") // false
isReferenceType(123) // false
isReferenceType([1,2,3]) // false
【讨论】:
是的,但isReferenceType("foo")
或 isReferenceType(123)
或 isReferenceType([1, 2, 3])
也将返回 true
(如果已导入 Foundation)。
啊,老沉默演员。检查动态类型而不是值本身似乎可以解决...
或者:func isReferenceType<T: Any>(toTest: T) -> Bool return !(T.self is AnyObject)
【参考方案2】:
斯威夫特 5
func isReferenceType(_ toTest: Any) -> Bool
return type(of: toTest) is AnyClass
【讨论】:
以上是关于在 Swift 中检查值或引用类型的主要内容,如果未能解决你的问题,请参考以下文章