【问题标题】:Objective C long bridged to Swift as int?Objective C 长期作为 int 桥接到 Swift?
【发布时间】:2020-09-03 13:22:16
【问题描述】:

我无法将 ObjectiveC 长类型转换为 Swift。

//Swift
typealias Long = Int64
struct Item: Equatable {
    let itemId: Long
    ...
}

//ObjC
@interface MyObject : NSObject
@property(nonatomic, assign) long itemId;

//Try create object in Swift
Item(itemId: objCObject.itemId) 

错误: 无法将“Int”类型的值转换为预期的参数类型“Long”(又名“Int64”)

【问题讨论】:

标签: objective-c swift


【解决方案1】:

(Objective-)C 类型 long 被桥接到 Swift,CLong 是 Swift Int 类型的别名。 Int 可以是 32 位或 64 位整数,具体取决于平台。

在任何情况下,您都不能将Int64 直接转换或分配给Int,另请参阅Can I cast Int64 directly into Int?

如果您想将 Swift itemID 保留为 Int64,那么您必须在调用 Objective-C 方法时将其转换为 CLong。或者,您可以更改 Swift 类型以使其兼容:

struct Item: Equatable {
    let itemId: CLong
    ...
}

另一种选择是将 Objective-C 类型更改为

@property(nonatomic, assign) int64_t itemId;

然后以 Int64 的形式导入到 Swift。

【讨论】:

    猜你喜欢
    • 2020-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多