我有一个有效载荷从系统的一个部分穿梭到另一个部分。
航天飞机载有任何有效载荷,所以我可以携带任何类型的物体,包括像元组等非物体。
系统的一个部分是接受AnyObject,所以是错误。
我很困惑,比如用什么类型来携带东西,所以它在系统的所有部分之间是兼容的。
我应该做出选择并坚持使用其中一种类型,整个系统的Any或AnyObject,或者如果你不关心它们的实际类型,那么它是穿梭物品的最佳选择。
我们在其他语言中使用Object
类型可以携带任何东西,但不确定这在SWIFT世界中是如何工作的
或者是否有可以在两者之间起作用的铸件?如果我100%确信即将到来的对象是AnyObject,我可以将它作为AnyObject从任何时候加载(Any)
对负面选民的注意事项:如果对您没有任何意义或帮助改进这个问题,请帮助澄清问题,因为我是SWIFT的新手。我需要答案而不是你的投票。
修改
我必须在单元测试时对Any
和AnyObject
进行比较,你将如何处理这种情况。
class Test {
var name: String = "test"
}
var anyObject: AnyObject = Test()
var any: Any = anyObject
//XCTAssert(any == anyObject, "Expecting them to be equal")
any == anyObject
答案 0 :(得分:1)
Any
将包含任何类型,包括结构和枚举以及类。 AnyObject
只会举办课程。那么Any
可以存储的内容是AnyObject
可以存储的超集。任何数量的投射都不会将您的自定义结构或枚举塞进AnyObject
。
有时似乎AnyObject
持有一个像String
这样的结构,但事实并非如此,发生的事情是Swift将String
转换为NSString
(这是一个类,因此可以存储在AnyObject
中)。
(从技术上讲,Any
被定义为实现0或更多协议的东西,任何东西都可以,而AnyObject
被定义为所有类隐式符合的特殊协议,并标记为@objc
协议,所以只有类可以符合它)
编辑:回答有关比较的问题 - ==
或Any
没有AnyObject
运算符(如果等同Any
包含String
,它将如何运作? 1}}到包含Any
的{{1}}?)。在使用适当定义的该类型的运算符进行比较之前,您必须将双方重新放回原来的位置。