matt
matt

Reputation: 534950

Why is an Array an AnyObject in Swift?

I'm having trouble understanding the limitations of AnyObject.

You can see from the header that Array is a struct. Nevertheless, this code works:

var whatobject : AnyObject
whatobject = [1,2]

And it's not just literal arrays:

var whatobject : AnyObject
let arr = [1,2,3]
whatobject = arr

However, I can't assign a struct that I make to whatobject:

struct S {}
var whatobject : AnyObject
whatobject = S() // error

So an array isn't really a struct after all?

Upvotes: 6

Views: 7955

Answers (1)

Bryan Chen
Bryan Chen

Reputation: 46578

that's the fun part when bridging comes in...

by default, Swift bridge

  • Int (and friends) to NSNumber
  • String to NSString
  • Dictionary to NSDictionary

so compiler will change them to object if need to

and you can do

var num : AnyObject = 1 // I think num is now NSNumber
var arr : AnyObject = [1,2,3] // I think arr is now NSArray of @[@1,@2,@3]

and you can't assign sturct/enum to AnyObject because they are not object type (you can use Any to hold them)

Upvotes: 8

Related Questions