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
,你String
S作为NSString
,你Array
S作为NSArray
,你的字典如NSDictionary
,所有这一切都是对象.使用AnyObject
作为值类型的字典可以转换为NSDictionary
,但是使用的字典Any
不是.
归档时间: |
|
查看次数: |
29876 次 |
最近记录: |