Swift defines the AnyObject type alias to represent instances of any reference type, and it’s internally defined as a protocol.
Consider the following code:
var array = [AnyObject]()
struct Test {}
array.append(Test())
This code generates a compilation error, with the following error message:
Type 'Test' does not conform to protocol 'AnyObject'
The failure is obvious because a struct is a value and not a reference type, and as such it doesn’t implement and cannot be cast to the AnyObject protocol.
Now consider the following code:
var array = [AnyObject]()
array.append(1)
array.append(2.0)
array.append("3")
array.append([4, 5, 6])
array.append([7: "7", 8: "8"])
struct Test {}
array.append(Test())
The array array is filled in with values of type respectively int, double, string, array and dictionary. All of them are value types and not reference types, and in all cases no error is reported by the compiler. Why?
Answer / iosraj
The reason is that swift automatically bridges:
number types to NSNumber
strings to NSString
arrays to NSArray
dictionaries to NSDictionary
which are all reference types.
| Is This Answer Correct ? | 1 Yes | 0 No |
What is tuple? How to create a tuple in swift?
What is argument label in swift?
What is “defer”?
The String struct doesn’t provide a count or length property or method to count the number of characters it contains. Instead a global countElements<T>() function is available. When applied to strings, what’s the complexity of the countElements function: O(1) O(n) and why?
What is the use of break statement in swift language?
What are the half open range operators in swift?
What is bridging header in swift?
What is clean swift?
What is swift nsarray?
How would you define variables and constants in swift programming language?
Explain the different features of swift programming language?
What is the benefit of using guard statement in swift?