提问人:thequestioner 提问时间:11/3/2023 最后编辑:thequestioner 更新时间:11/3/2023 访问量:53
Swift 不透明对象和盒装类型的 Objective-C 等价物?
Objective-C equivalents of Swift opaque object and boxed type?
答:
Objective-C 等同于 Swift 不透明类型只是 id 吗?
不。 等效于 AnyObject。ObjC 中没有等效于 Swift 不透明类型。你可以狠狠地眯着眼睛说,两者都等价于 ,但它们不是。它们从根本上是不同的(例如,它们以一种非常重要的方式具有不同的内存布局),但它们在使用方式上有一些模糊的相似之处。id
some ThisProtocol
any ThisProtocol
id <ThisProtocol>
盒装类型的等价物是什么?
我假设你在这里指的是存在主义类型(例如)。没有等价物。在 ObjC 中,所有东西(除了原语...)都是一个对象。甚至类也是对象。对象可以传递消息。协议定义了一组可以传递给对象的方法。这几乎就是 Objective-C 的全部内容。甚至像“轻量级泛型”这样的东西也不是 ObjC 语言的一部分,而是有助于桥接到 Swift 的编译器提示。ObjC的“属性”主要是用于创建ivar和方法的句法糖。这是一种非常简单的语言。Swift 中的许多东西在 ObjC 中没有对应的东西。any SomeProtocol
但类似的东西又是最接近的等价物。它实际上更像是 Swift 中的“盒装类型”。用 Swift 编写这将是一件奇怪的事情,甚至可能不合法,但这是最接近的。id <ThisProtocol>
AnyObject & ThisProtocol
id <ThisProtocol>
ObjC 中有一个“盒装类型”,但我怀疑这是你的意思。它是 NSValue,用于将基元类型装箱到对象中。从技术上讲,它的工作方式与 Swift 中的类型完全相同。但就其使用方式而言,相反,它与类型完全不同。语言非常不同。any
any
评论