如何使用Objective C类中的多个参数调用Swift函数?

Arn*_*yno 10 xcode objective-c ios swift

例如,我在swift中有这个方法:

@objc class MyClass: NSObject
....
@objc class func viewWithIndex(index: Int, str: String) {
    println(index, str)
}
Run Code Online (Sandbox Code Playgroud)

那么我想在我的objective-c类中调用该方法,我期待这个调用简单,[MyClass viewWithIndex:10 str:@"string"];但它不起作用.

我怎么称呼它?请帮忙.

注意:我已经对objective-c进行了快速函数调用,[MyClass showSomething];这意味着我已经成功设置了桥接类的必要设置.只有具有两个或更多参数的函数才是我的问题.:)

解决了:

我不知道我发生了什么,但我只是重新启动我的mac并删除objc它,它与电话一起工作[MyClass viewWithIndex:10 str:@"string"];.我记得读过文档.

将Objective-C代码迁移到Swift

  • 要在Objective-C中可访问和使用,Swift类必须是Objective-C类的后代,或者必须标记为@objc.

hap*_*384 12

这在Swift 3.0中对我有用

public class func viewWithIndex(_ index: Int, str: String) {
    println(index, str)
}
Run Code Online (Sandbox Code Playgroud)

在Swift声明中的第一个参数之前添加下划线允许我从目标c调用而不命名第一个参数,如下所示:

[MyClass viewWithIndex:10 str:@"string"]
Run Code Online (Sandbox Code Playgroud)

  • @JamesTSnell _确定在调用方法时是否应该使用参数名称.在上面的例子中,甚至从swift调用该方法看起来像这样:`className.viewWithIndex(10,str:"test")`.如果方法定义在index和str之前都有_,那么方法调用将如下所示:`className.viewWithIndex(10,"test")` (2认同)

Jas*_*ues 4

我相信您需要将该函数标记为公共(有意义)或动态。否则,它将成为 Swift 优化的候选者(内联或 vtable 方法),这将使其对 Objective-C 不可见。

尝试这个:

public class func viewWithIndex(index: Int, str: String) {
    println(index, str)
}
Run Code Online (Sandbox Code Playgroud)

或者这个:(确实没有意义,但也应该有效)

private dynamic class func viewWithIndex(index: Int, str: String) {
    println(index, str)
}
Run Code Online (Sandbox Code Playgroud)