ios - 在 Swift 中使用 'Any' 有什么意义?什么时候使用 'Any' 什么时候使用 'AnyObject' ?

标签 ios objective-c swift

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内置的StringInt DictionaryArray 等...因为它们在 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[],所以它应该只能包含类类型,而myIntmyStr myDict都兼容Any,不兼容AnyObjectAny不兼容`任何对象。

但是,我认为它可以编译的原因是因为 myInt 在内部可以转换为 Objective-C 的 NSInteger,它是 AnyObjectString/NSStringDictionary/NSDictionary 也是如此。我的猜测正确吗?那么,这是我的问题:

  • 即使您可以将 Swift 的数组定义为 AnyObject 并且仍然存储 Swift 的结构,例如 IntString,那有什么意义呢?使用 Any?在某些情况下,您必须将数组定义为 Any 吗? Dictionary 的值类型如何?

  • 我应该如何决定何时使用 Any 以及何时使用 AnyObject,尤其是当我处理的类型可以转换为 Objective-C 的 Object 时,比如 StringIntDictionary 等?

我认为 Cocoa 和 Cocoa Touch 中的大多数方法返回 AnyObject!,而不是 Any!。所以我想知道在 Swift 的数组和字典的值类型中使用 Any 的最佳情况是什么。

最佳答案

您可以使用 Any[] 来存储自定义结构。

关于ios - 在 Swift 中使用 'Any' 有什么意义?什么时候使用 'Any' 什么时候使用 'AnyObject' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24570445/

相关文章:

objective-c - 每个分段的UISegmentedControl自定义图像

swift - 尝试传递 nil 但编译器不断让我强制打开可选值 Swift

ios - swift - 将字符串转换为日期,然后转换为不同格式的字符串

ios - 使用 PFFile 管理子类 PFUser 的个人资料图片 - Swift/iOS

iphone - 如何检查 ios 中的 json 响应中的 key 是否可用

ios - Swift 字符串附加可选的 nil

iphone - 如何添加JSON框架

ios - 如何在Apple iOS应用程序中使用Cocoa框架

c - #define 指令问题

ios - 核心数据: Is it safer to pass around objects or object ID's?