【问题标题】:Cannot call an ObjC method taking int in Swift because Int32 cannot be converted to Int无法在 Swift 中调用采用 int 的 ObjC 方法,因为 Int32 无法转换为 Int
【发布时间】:2015-03-22 01:55:36
【问题描述】:

我正在开发一个混合的 Objective-C 和 Swift 项目。 我有一个名为Point 的类,在Objective-C 中定义,它具有int 属性和一个初始化器:

@property (nonatomic) int column;
@property (nonatomic) int row;
- (id) initWithColumn:(int)column row:(int)row;

我用来在 Swift 文件中创建对象:

Point(column: Column, row: Row)

但它给出了一个错误:

无法使用类型为“(列:Int,行:Int)”的参数列表调用“init”

通过进一步检查,我发现Objective-C中的这些int属性在Swift中变成了Int32,而Int32无法转换为Int。 有谁知道如何解决这个问题?

我想知道 Objective C int 是如何在 Swift 中变成 Int32 的,以及如何处理这个问题,以便我可以在 Objective C 的 Swift 中使用 Int 类型?我经常使用这个类,并且更喜欢保持类型一致而不是每次都强制转换。

【问题讨论】:

    标签: objective-c swift types


    【解决方案1】:

    您可能应该避免在 Objective-C 中使用 int 并改用 NSInteger,它会映射到 Swift 的 Int

    无论如何,如果您需要将Int 变量(例如n)转换为Int32,您可以使用

    var n32: Int32 = Int32(n)
    

    所以你的代码是

    Point(column: Int32(Column), row: Int32(Row))
    

    【讨论】:

      【解决方案2】:

      您所要做的就是从一种类型转换为另一种类型。

      试试:Point(column: int(Column), row: int(Row))

      顺便说一句,在 Swift/Objective-C 中使用以大写字母开头的名称命名变量是不标准的/令人困惑的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-10
        • 2021-08-21
        • 2017-04-20
        • 2013-02-28
        • 2016-03-15
        相关资源
        最近更新 更多