无法调用在Swift中使用int的ObjC方法,因为Int32无法转换为Int

时间:2015-01-23 04:14:22

标签: objective-c swift types

我正在研究一个混合的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)

但是它给出了一个错误:

  

无法使用类型为'(column:Int,row:Int)'的参数列表调用'init'

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

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

2 个答案:

答案 0 :(得分:5)

您应该避免在Objective-C中使用int,而是使用NSInteger来代替Swift' Int

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

进行转换。
var n32: Int32 = Int32(n)

所以你的代码将是

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

答案 1 :(得分:0)

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

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

顺便说一下,在Swift / Objective-C中使用以大写字母开头的名称命名变量是非标准/混淆。