【问题标题】:Mixing Swift and Objective C: using Swift types in Objective C混合 Swift 和 Objective C:在 Objective C 中使用 Swift 类型
【发布时间】:2016-10-13 09:12:51
【问题描述】:

我在 Objective C 中有一些遗留代码,我不想重写为 Swift,但我想在 Swift 中使用这些代码。

我的工作正常,但是在 Swift 和 Objective C 中的基本类型之间进行转换是很尴尬和冗长的。例如,您必须从 Swift 中的 Int 转换为 Int32 才能在 Objective C 中使用它。

为了使这更容易,我很高兴在我的 Objective C 代码中创建额外的重载,这些重载接受 Swift 类型。这似乎比在每个调用站点中进行转换更容易。

有没有办法在 Objective C 中使用 Swift 类型?像这样的:

-(void) doSomething:(Int*)theInt {
}

这可能吗?

如果做不到这一点,是否可以在 Swift 中在两种类型之间创建隐式转换运算符?

还有其他建议的解决方案吗?

根据要求,这是当前情况的代码示例。

这是目标 C:

@interface TestClass : NSObject 

+(void) somemethod:(int)param;

@end

@implementation TestClass

+(void) somemethod:(int)param {

}

@end

这里是一个在 Swift 中调用方法的例子:

let swiftInt :Int = 2
TestClass.somemethod(Int32(swiftInt))

当从 Swift 调用时,我想消除在每个调用站点中转换为 Int32 的需要。

【问题讨论】:

  • Swift 的 Int 在 Objective C 中被称为 NSInteger。编辑:嗯,它是自动桥接,但它们不是同一类型。
  • 能否提供代码示例?
  • @M_G 我已按要求添加了当前情况的示例

标签: objective-c swift


【解决方案1】:

我将方法签名更改为使用 NSInteger 而不是 int,它可以正常工作而无需强制转换。

+(void) somemethod:(int)param;

改为:

+(void) somemethod:(NSInteger)param;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-03
    • 1970-01-01
    • 2021-09-26
    • 1970-01-01
    • 2016-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多