我正在将项目从Swift 2.2迁移到Swift 3并遇到以下问题。
如果给定输入的类型为AnyObject
,我有一个函数测试
简化的实现可能如下所示:
func testIfIsObjectType(input: Any?) -> Bool {
if input is AnyObject {
return true
}
return false
}
在Swift 2.2中,以下内容返回false
。
let intValue = 3
let result = testIfIsObjectType(input: intValue)
print(result)
在Swift 3.3中,它返回true
。
问题是由于所有类型(类型Any
)现在都可以转换为AnyObject
这一事实造成的。
例如,在Swift 3中,您现在可以写:
let someType: Any = 1
let someObject = someType as AnyObject
请注意as
而不是as?
或as!
,必须在Swift 2中使用。
如何检查input
是否属于AnyObject
类型,因此函数将返回false
,如Swift 2中所示。
解决方案:
func testIfIsObjectType(input: Any?) -> Bool {
if type(of: input) is AnyClass {
return true
}
return false
}