I have a simple question: Why does Bool
qualify as AnyObject
According to Apple's documentation:
"AnyObject
can represent an instance of any class type.
Bool
is a struct
So why does this statement pass?
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!")
}
AnyObject is only for reference types (classes), Any is for both value and reference types. So you should go for [String: Any] . Swift provides two special types for working with nonspecific types: Any can represent an instance of any type at all, including function types.
You use AnyObject when you need the flexibility of an untyped object or when you use bridged Objective-C methods and properties that return an untyped result. AnyObject can be used as the concrete type for an instance of any class, class type, or class-only protocol.
Any and AnyObject are two special types in Swift that are used for working with non-specific types. According to Apple's Swift documentation, Any can represent an instance of any type at all, including function types and optional types. AnyObject can represent an instance of any class type.
Because it's being bridged to an NSNumber instance.
Swift automatically bridges certain native number types, such as Int and Float, to NSNumber. - Using Swift with Cocoa and Objective-C (Swift 2.2) - Numbers
Try this:
let test = bool as AnyObject
print(String(test.dynamicType))
This behavior is due to the Playground runtime bridging to Objective-C/Cocoa APIs behind-the-scenes. Swift version 3.0-dev (LLVM 8fcf602916, Clang cf0a734990, Swift 000d413a62) on Linux does not reproduce this behavior, with or without Foundation imported
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With