Swift 不透明对象和盒装类型的 Objective-C 等价物?

Objective-C equivalents of Swift opaque object and boxed type?

提问人:thequestioner 提问时间:11/3/2023 最后编辑:thequestioner 更新时间:11/3/2023 访问量:53

问:

Objective-C 等同于 Swift 不透明类型只是 id<protocol> 吗?

盒装类型的等价物是什么?

Swift Objective-C

评论

1赞 HangarRash 11/3/2023
如果您以文本形式发布一些您正在尝试翻译的 Swift 代码示例,那将会很有帮助。还要显示您尝试的 Objective-C 代码。
0赞 Cy-4AH 11/3/2023
Objective-C 在协议中没有关联的类型,因此没有不透明的类型。

答:

1赞 Rob Napier 11/3/2023 #1

Objective-C 等同于 Swift 不透明类型只是 id 吗?

不。 等效于 AnyObject。ObjC 中没有等效于 Swift 不透明类型。你可以狠狠地眯着眼睛说,两者都等价于 ,但它们不是。它们从根本上是不同的(例如,它们以一种非常重要的方式具有不同的内存布局),但它们在使用方式上有一些模糊的相似之处。idsome ThisProtocolany ThisProtocolid <ThisProtocol>

盒装类型的等价物是什么?

我假设你在这里指的是存在主义类型(例如)。没有等价物。在 ObjC 中,所有东西(除了原语...)都是一个对象。甚至类也是对象。对象可以传递消息。协议定义了一组可以传递给对象的方法。这几乎就是 Objective-C 的全部内容。甚至像“轻量级泛型”这样的东西也不是 ObjC 语言的一部分,而是有助于桥接到 Swift 的编译器提示。ObjC的“属性”主要是用于创建ivar和方法的句法糖。这是一种非常简单的语言。Swift 中的许多东西在 ObjC 中没有对应的东西。any SomeProtocol

但类似的东西又是最接近的等价物。它实际上更像是 Swift 中的“盒装类型”。用 Swift 编写这将是一件奇怪的事情,甚至可能不合法,但这是最接近的。id <ThisProtocol>AnyObject & ThisProtocolid <ThisProtocol>

ObjC 中有一个“盒装类型”,但我怀疑这是你的意思。它是 NSValue,用于将基元类型装箱到对象中。从技术上讲,它的工作方式与 Swift 中的类型完全相同。但就其使用方式而言,相反,它与类型完全不同。语言非常不同。anyany

评论

0赞 thequestioner 11/3/2023
我最初输入的是id<protocol>但编辑器只显示id。不知道为什么。
1赞 Rob Napier 11/4/2023
啊;之所以这样做,是因为它将其解释为 HTML。你必须小心地在它周围加上反引号,以将其标记为文字(或像你一样使用反斜杠引号)