any与anyObject不同

时间:2014-12-25 01:53:08

标签: swift

我有一个有效载荷从系统的一个部分穿梭到另一个部分。

航天飞机载有任何有效载荷,所以我可以携带任何类型的物体,包括像元组等非物体。

系统的一个部分是接受AnyObject,所以是错误。

我很困惑,比如用什么类型来携带东西,所以它在系统的所有部分之间是兼容的。

我应该做出选择并坚持使用其中一种类型,整个系统的Any或AnyObject,或者如果你不关心它们的实际类型,那么它是穿梭物品的最佳选择。

我们在其他语言中使用Object类型可以携带任何东西,但不确定这在SWIFT世界中是如何工作的

或者是否有可以在两者之间起作用的铸件?如果我100%确信即将到来的对象是AnyObject,我可以将它作为AnyObject从任何时候加载(Any)

对负面选民的注意事项:如果对您没有任何意义或帮助改进这个问题,请帮助澄清问题,因为我是SWIFT的新手。我需要答案而不是你的投票。

修改

我必须在单元测试时对AnyAnyObject进行比较,你将如何处理这种情况。

class Test {
    var name: String = "test"
}

var anyObject: AnyObject = Test()

var any: Any = anyObject

//XCTAssert(any == anyObject, "Expecting them to be equal")
any == anyObject

1 个答案:

答案 0 :(得分:1)

Any将包含任何类型,包括结构和枚举以及类。 AnyObject只会举办课程。那么Any可以存储的内容是AnyObject可以存储的超集。任何数量的投射都不会将您的自定义结构或枚举塞进AnyObject

有时似乎AnyObject持有一个像String这样的结构,但事实并非如此,发生的事情是Swift将String转换为NSString(这是一个类,因此可以存储在AnyObject中)。

(从技术上讲,Any被定义为实现0或更多协议的东西,任何东西都可以,而AnyObject被定义为所有类隐式符合的特殊协议,并标记为@objc协议,所以只有类可以符合它)

编辑:回答有关比较的问题 - ==Any没有AnyObject运算符(如果等同Any包含String,它将如何运作? 1}}到包含Any的{​​{1}}?)。在使用适当定义的该类型的运算符进行比较之前,您必须将双方重新放回原来的位置。