In Swift documentation, it says the following:
Swift提供了两种特殊类型的别名,用于处理非特定类型: AnyObject可以表示任何类类型的实例。 除了函数类型之外,任何可以表示任何类型的实例。 注意 仅当您明确需要它们提供的行为和功能时才使用Any和AnyObject。最好具体了解您希望在代码中使用的类型。
如果我理解正确,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
与`AnyObject不兼容。
但是,我认为可以编译它的原因是因为myInt
可以在内部转换为Objective-C&#39; NSInteger
,这是AnyObject
的子类型。 String
/ NSString
和Dictionary
/ NSDictionary
也是如此。我猜是正确的吗?然后,这是我的问题:
即使您可以将Swift的数组定义为AnyObject
并仍然存储Swift的结构,例如Int
或String
,那么&#39; s使用Any
的关键点?是否有任何情况需要将数组定义为Any
? Dictionary
的值类型怎么样?
我应该如何决定何时使用Any
以及何时使用AnyObject
,特别是如果我处理的类型可以转换为Objective-C的对象,例如String
,Int
,Dictionary
等?
我认为Cocoa和Cocoa Touch中的大多数方法都返回AnyObject!
,而不是Any!
。所以我想知道在Swift的数组和字典的值类型中使用Any
的最佳情况是什么。
答案 0 :(得分:1)
您可以使用Any []存储自定义结构。
答案 1 :(得分:1)
但是,当我编写以下代码时,可以在没有编译的情况下进行编译 任何错误:
如果您没有import Foundation
,则不会。没有导入Foundation,就会出现很多错误。它只会为您编译,因为基金会对NSNumber
,String
到NSString
等数字类型进行了桥接。