objective-c - 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
如果我将int
Objective-C 更改为NSInteger
,或者这些类型在 Objective-C 中的行为方式完全相同,是否会有任何危险?
解决方案
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
推荐阅读
- c++ - char p[0] 是表示自动分配的缓冲区还是安全指针?
- python - python的高级循环问题
- python - 从空索引路由时出现 403 错误
- python - BeautifulSoup get_text 只有我想要
- apache-kafka - Kafka Streams:ConsumerRebalanceListener 实现
- python - 从给定列表中选择 8 个元素的所有组合
- oracle - 在 Oracle 过程中更改 NLS_DATE_Format
- javascript - 由 chrome 扩展程序呈现时,Bootstrap Modal 无法正确显示
- sed - Jenkins 声明性管道脚本中的 sed 命令
- node.js - 如何打印 node.js 中的所有 cookie?