Swift 与 Objc 方法相互调用

相关DEMO:TestIn.zip
相关资料:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html

1、先新建个项目。起名:TestIn,
2、新建Cocoa Touch Class
QQ20140715-1

/*=============================
* Objc 调用 Swift 方法
=============================*/
3、NSObject类,语言选:Swift,起名:KDSwift
QQ20140715-2

4、在KDSwift写2个方法,一个实例方法,一个类方法。
【注意】需要用 @objc 把类和方法名字包起来,否则在Objc里面是用不了的
In KDSwift.swift
[objc]
@objc(KDSwift)//需要用 @objc 把类和方法名字包起来
class KDSwift: NSObject {

//instance
@objc(sayHello)
func sayHello ()-> String {
return "func : Hello"
}

//class
@objc(sayHello)
class func sayHello ()-> String {

return "class func : Hello"
}
}
[/objc]

5、调用KDSwift里面的方法
In AppDelegate.m
[objc]
#import "TestIn-Swift.h"//注意引入头格式是:项目名-Swift.h
//这个头文件在项目中是找不到的,不过可以按住Command,然后鼠标点击TestIn-Swift.h。
//里面可以看到KDSwift的方法。

– (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

KDSwift *swift = [KDSwift new];
NSLog(@"%@",[swift sayHello]);

NSLog(@"%@",[KDSwift sayHello]);
return YES;
}
[/objc]

/*=============================
* Swift 调用 Objc 方法
=============================*/
6、依旧新建Cocoa Touch Class,NSObject类,语言选:Objective-C,起名:KDObjc
QQ20140715-3

7、找到 TestIn-Bridging-Header.h ,系统自动生成的
【如果没有生成,请自己在Build Settings->Objective-C Bridging Header设置,注意设置的是路径,不是文件名】
加入 KDObjc.h 头文件。
In TestIn-Bridging-Header.h
[objc]
//
// Use this file to import your target’s public headers that you would like to expose to Swift.
//

#import "KDObjc.h"
[/objc]

8、In KDObjc.h
[objc]
@interface KDObjc : NSObject

– (NSString*)sayHi;

+ (NSString*)sayHi;

@end
[/objc]

9、In KDObjc.m
[objc]
#import "KDObjc.h"

@implementation KDObjc

– (NSString*)sayHi{
return @"Hi -";
}

+ (NSString*)sayHi{
return @"Hi +";
}

@end
[/objc]

10、为了方便在KDSwift的init里面调用KDObjc好了
In KDSwift.swift
[objc]
init(){

let objc = KDObjc()
NSLog(objc.sayHi())

NSLog(KDObjc.sayHi())

}
[/objc]

11、全部运行结果
QQ20140715-4

68 thoughts on “Swift 与 Objc 方法相互调用

Vcjetn进行回复 取消回复

电子邮件地址不会被公开。