Ala*_*lak 87 value-type reference-type swift
我不明白何时使用AnyObject以及何时在Swift中使用Any.
在我的情况下,我有一个字典
[String:???]
??? :可以是Int,Double,Float,String,Array,Dictionary
有人可以解释我和AnyObject之间的区别,以及在我的情况下使用哪一个.
奥洛克
Tee*_*jay 107
AnyObject仅适用于引用类型(类),Any适用于值和引用类型.
所以你应该去[String: Any].
为Any和AnyObject键入Casting
Swift提供了两种特殊类型来处理非特定类型:
Any可以表示任何类型的实例,包括函数类型.AnyObject可以表示任何类类型的实例.注意:
使用
Any和AnyObject只有当你明确需要的行为以及它们提供的功能.最好具体了解您希望在代码中使用的类型.
来自Swift编程语言:https: //developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/TypeCasting.html#//apple_ref/doc/uid/TP40014097-CH22-ID342
-
还要注意,当您使用Cocoa API时,通常会收到一个AnyObject数组,这是因为Objective-C数组不是典型的.所以你需要将它们转换为你期望的数组类型.
-
编辑:( 2015
年12月22日)在最后一个声明中,请注意,Swift 2.0和Xcode 7正在发生变化
.Apple已经在Objective-C中引入了"轻量级"泛型,因此许多Cocoa API现在已经返回了正确的类型.
编辑:( 2016年10月18日)
请注意,从Swift 3.0开始,Objective-C id现在被导入Any,而不再是AnyObject.
vac*_*ama 45
无论您使用Any还是AnyObject取决于您的预期用途:
如果你的字典将仅限于雨燕的代码中使用,那么就应该使用Any,因为你的类型(Int,Double,Float,String,Array,和Dictionary)不是对象.
如果您将字典传递给期望的Objective-C例程NSDictionary,那么您应该使用AnyObject.
当您import Foundation或import UIKit或者import Cocoa,也可以来声明数组[String: AnyObject],但在这种情况下,斯威夫特对待你Int,Double,Float文字的NSNumber,你StringS作为NSString,你ArrayS作为NSArray,你的字典如NSDictionary,所有这一切都是对象.使用AnyObject作为值类型的字典可以转换为NSDictionary,但是使用的字典Any不是.
| 归档时间: |
|
| 查看次数: |
29876 次 |
| 最近记录: |