我们正在尝试在Objective-C实现中引用swift方法。
Swift 3类:
import Foundation @objc class MySwiftClass: NSObject { override init() { super.init() } func sayHello() -> Void { print("hello"); } func addX(x:Int, andY y:Int) -> Int { return x+y } }
Objective-C的实现(Objective-cm):
#import "ProductModuleName-Swift.h" MySwiftClass* getData = [[MySwiftClass alloc]init]; [getData sayHello] //works [getData addX:5 addY:5] //No visible @interface for 'MySwiftClass' declares selector 'addX:addY'
如果"ProductModuleName-Swift.h"在Xcode源文件编辑器中单击命令,则可以看到Swift方法如何映射到Objective-C。
"ProductModuleName-Swift.h"
在你的情况下
@interface MySwiftClass : NSObject - (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER; - (void)sayHello; - (NSInteger)addXWithX:(NSInteger)x andY:(NSInteger)y; @end
被称为
MySwiftClass* getData = [[MySwiftClass alloc]init]; [getData sayHello]; NSInteger result = [getData addXWithX:5 andY:5];
更好的Swift 3方法名称可能是
func add(x: Int, y:Int) -> Int
因为x已经是第一个参数的参数(外部)名称。您还可以将一个@objc()属性添加到Swift定义中,以控制Objective-C名称。例如,
x
@objc()
@objc(addX:andY:) func add(x: Int, y: Int) -> Int { return x+y }
从Objective-C可以将其称为
NSInteger result = [getData addX:5 andY:5];