com*_*exi 21 objective-c swift
我们试图在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
}
}
Run Code Online (Sandbox Code Playgroud)
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'
Run Code Online (Sandbox Code Playgroud)
Mar*_*n R 32
如果"ProductModuleName-Swift.h"在Xcode源文件编辑器中按住Command键单击,则可以看到Swift方法如何映射到Objective-C.
在你的情况下,将是
@interface MySwiftClass : NSObject
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
- (void)sayHello;
- (NSInteger)addXWithX:(NSInteger)x andY:(NSInteger)y;
@end
Run Code Online (Sandbox Code Playgroud)
被称为
MySwiftClass* getData = [[MySwiftClass alloc]init];
[getData sayHello];
NSInteger result = [getData addXWithX:5 andY:5];
Run Code Online (Sandbox Code Playgroud)
一个更好的Swift 3方法名称可能是
func add(x: Int, y:Int) -> Int
Run Code Online (Sandbox Code Playgroud)
因为x已经是第一个参数的参数(外部).您还可以@objc()向Swift定义添加属性以控制Objective-C名称.例如,用
@objc(addX:andY:)
func add(x: Int, y: Int) -> Int {
return x+y
}
Run Code Online (Sandbox Code Playgroud)
它将从Objective-C调用为
NSInteger result = [getData addX:5 andY:5];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8471 次 |
| 最近记录: |