首页 > 解决方案 > Objective-C int 作为 Int32 桥接到 Swift

问题描述

如果我是正确的,Objective-C 的int类型长度取决于平台字长(即在 64 位环境中运行时为 64 位,在 32 位环境中运行时为 32 位)。

然而,当将 Objective-C 接口桥接到 Swift 时,这种类型被桥接,因为Int32它明确定义了 32 位的大小。

这是一个错误,还是int在 Objective-C 中总是占用 32 位?如果它不是一个错误,为什么它会被桥接为Int32

Objective-C 接口示例

-(int)numberOfItems;

这被桥接到:

func numberOfItems -> Int32

当我将方法签名更改为 useNSInteger时,它​​会正确桥接:

-(NSInteger)numberOfItems;
func numberOfItems -> Int

如果我将intObjective-C 更改为NSInteger,或者这些类型在 Objective-C 中的行为方式完全相同,是否会有任何危险?

标签: objective-cswiftintnsintegerint32

解决方案


Objective C's int(或者正确地说,C's int)的大小应该至少为 16 位,因此将其存储在 32 位中并非无效。可能在 Apple 的实现中它始终是 32 位的int.

如果我是正确的,Objective-C 的 int 类型长度取决于平台字长(即在 64 位环境中运行时为 64 位,在 32 位环境中运行时为 32 位)。

那将是NSInteger,不是int。您可能会混淆它们,因为 in Swift'sInt是 's 的等效Objective C类型NSInteger

您甚至可以在文档中看到它:

typealias NSInteger = Int

推荐阅读