[IOSS]Swift与OC混编
Demo:http://download.csdn.net/detail/u012881779/9237839
1.用Swift或Object-c创建一个工程(DMTestDemo)并拖入一个第三方工具(ASIHTTPRequest)
适配过后工程结构大概下面这样:
2.基于NSObject创建一个桥接文件(DMTest-Bridging-Header.h)
命名规则:工程名-Bridging-Header.h(也可以按照自己意愿命名)
3.在Build Settings中找到 Bridging Header并双击添加内容:$(SRCROOT)/工程名/工程名-Bridging-Header.h
例如:$(SRCROOT)/DMTestDemo/DMTest-Bridging-Header.h
4.在Swift中调用OC需要在桥接文件(DMTest_Bridging_Header.h)中添加需要在.swift中调用的.h文件
若只需要在OC中调用Swift,则在桥接文件不需要做任何处理
#import <Foundation/Foundation.h> #import "ASIhttpRequest.h" @interface DMTest_Bridging_Header : NSObject @end5.完成上面的操作,就可以进行Swift与OC混编了
在Swift中调用OC:
import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() //接口 let portStr = "https://www.baidu.com" //链接中包含中文时 //portStr = portStr.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)! let url = NSURL(string:portStr) let request = ASIHTTPRequest(URL: url) request.delegate = self request.startAsynchronous() } //请求成功 func requestFinished(request : ASIHTTPRequest){ let data = request.responseData //把NSData对象转换回JSON对象 let json : AnyObject! = try? NSJSONSerialization .JSONObjectWithData(data(),options:NSJSONReadingOptions.AllowFragments) print("request finished"); } //请求失败 func requestFailed(request : ASIHTTPRequest){ print("request Failed") } }
在OC中调用Swift:
系统默认给我们生成了头文件(需要Swift类是NSObject的直接或者间接子类)
调用规则: 工程名-Swift.h (从步骤3的图可以看见 Objective-C Generated Interface Header Name)
#import "ASIHTTPRequest.h" #import "DMTestDemo-swift.h" @implementation ASIAutorotatingViewController - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { ViewController *tempVC = [[ViewController alloc] init]; [tempVC requestFinished:nil]; [tempVC requestFailed:nil]; return YES; } @end