In Swift documentation, it says the following :
Swift provides two special type aliases for working with non-specific types: AnyObject can represent an instance of any class type. Any can represent an instance of any type at all, apart from function types. NOTE Use Any and AnyObject only when you explicitly need the behavior and capabilities they provide. It is always better to be specific about the types you expect to work with in your code.
如果我没有理解错的话,AnyObject
应该在兼容类类型的情况下使用,也就是说不能代表Swift内置的String
,Int
、Dictionary
、Array
等...因为它们在 Swift 中都表示为结构,而不是类。
但是,当我写下面的代码时,可以正常编译,没有任何错误:
var myInt: Int = 10
var myStr: String = "st"
var myDict:Dictionary<String, AnyObject> = ["k1": "1", "k2": 2, "k3": true]
var myArr:Array<AnyObject> = []
myArr.append(myInt)
myArr.append(myStr)
myArr.append(myDict)
println(myArr)
因为我将myArr
定义为AnyObject[]
,所以它应该只能包含类类型,而myInt
、myStr
,myDict
都兼容Any
,不兼容AnyObject
,Any
不兼容`任何对象。
但是,我认为它可以编译的原因是因为 myInt
在内部可以转换为 Objective-C 的 NSInteger
,它是 AnyObject的子类型
。 String
/NSString
和 Dictionary
/NSDictionary
也是如此。我的猜测正确吗?那么,这是我的问题:
即使您可以将 Swift 的数组定义为
AnyObject
并且仍然存储 Swift 的结构,例如Int
或String
,那有什么意义呢?使用Any
?在某些情况下,您必须将数组定义为Any
吗?Dictionary
的值类型如何?我应该如何决定何时使用
Any
以及何时使用AnyObject
,尤其是当我处理的类型可以转换为 Objective-C 的 Object 时,比如String
、Int
、Dictionary
等?
我认为 Cocoa 和 Cocoa Touch 中的大多数方法返回 AnyObject!
,而不是 Any!
。所以我想知道在 Swift 的数组和字典的值类型中使用 Any
的最佳情况是什么。
最佳答案
您可以使用 Any[] 来存储自定义结构。
关于ios - 在 Swift 中使用 'Any' 有什么意义?什么时候使用 'Any' 什么时候使用 'AnyObject' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24570445/