为什么Bool“AnyObject”而不是“Any”?

时间:2016-06-08 15:21:53

标签: swift swift2 swift-playground

我有一个简单的问题:为什么Bool符合AnyObject的条件 根据Apple的文档:

那么为什么这句话会过去?

let bool = true
let explicitBool: Bool = true

if (bool is AnyObject){
    print("I'm an object")
}

if (explicitBool is AnyObject){
    print("I'm still an object!")
}

2 个答案:

答案 0 :(得分:8)

因为它正在桥接到NSNumber实例。

  

Swift自动桥接某些本机数字类型,例如Int   和浮动,到NSNumber。 - Using Swift with Cocoa and Objective-C (Swift 2.2) - Numbers

试试这个:

final static Logger log = Logger.getLogger(yourclassname.class);

答案 1 :(得分:4)

此行为是由于Playground运行时桥接到幕后的Objective-C / Cocoa API。 Linux上的Swift 3.0-dev版(LLVM 8fcf602916,Clang cf0a734990,Swift 000d413a62)无论是否使用Foundation导入都不会重现此行为

let someBool = true
let someExplicitBool: Bool = true

print(someBool.dynamicType) // Bool
print(someExplicitBool.dynamicType) // Bool

print(someBool is AnyObject) // false
print(someExplicitBool is AnyObject) // fase

Try it online.