我们先看一下Swift调用Object-c
首先我们创建一个OC类
到最后一步的时候发现多了一个确认框,点击Yes 系统会生成一个Swift和OC的转换桥梁。
他的命名规则是 项目名称-Bridging-Header.h 这个是系统生成的我们直接用。
接下来我们给刚创建的OC类添加一个方法
- #import <Foundation/Foundation.h>
- @interface TestSwift2OC : NSObject
- -(void)TestOCStr;
- @end
实现方法
- #import "TestSwift2OC.h"
- @implementation TestSwift2OC
- -(void)TestOCStr
- {
- NSLog(@"这个是OC方法");
- }
- @end
然后我们在刚才系统生成的文件TestSwiftOC-Bridging-Header.h 中添加一条语句
#import "TestSwift2OC.h"
好了 ,我们在swift中可以调用了,试一下
- var testSwift2oc=TestSwift2OC()
- testSwift2oc.TestOCStr()
是不是已经出来了
下面我们看一下OC调用swift
我们新建一个swift 定义一个方法
- import UIKit
- class TestOC2Swft: NSObject {
- func testSwftStr(){
- println("这个是Swift方法")
- }
- }
然后我们在oc类(只需要在调用swift 方法的类中导入就行)中首先导入一个头文件
头文件命名格式 项目名称-Swift.h (这个是系统自动生成的)
我们继续使用当前项目,我们创建的项目名称是TestSwiftOC所以我们需要导入的类就是 TestSwiftOC-Swift.h
看代码
- #import "TestSwiftOC-Swift.h"
然后我们在oc中调用
- TestOC2Swft *testOC2Swift=[[TestOC2Swft alloc]init];
- [testOC2Swift testSwftStr];
调用就可以了
没有自动生成.h文件的自己创建一个.h文件
第一步:创建和配置Bridging-Header.h
Swift与OC进行混编,首先要有一个.h文件,这里使用Bridging-Header.h然后设置项目的Build Settings--Swift Compiler--Objective-C Bridging Header内容为DemoApp/Bridging-Header.h,这个与Bridging-Header.h位置有关,从项目的根目录开始在Objective-C Bridging Header选项里面写入Bridging-Header.h相对路径。
第二步:第三方项目依赖
对于第三方项目的依赖,一开始我打算用CocoaPods,但是过程曲折,最后一直报
- <span style="font-size:14px;">ld: 218 duplicate symbols for architecture i386
- clang: error: linker command failed with exit code 1 (use -v to see invocation)</span>
第三步:修改Bridging-Header.h
在Bridging-Header.h中写入#import "AFNetworking.h"
第四步:调用OC
前面的工作做完后我们就可以调用第三方项目的功能了
- //
- // ViewController.swift
- // DemoApp
- //
- // Created by jiezhang on 14/10/24.
- // Copyright (c) 2014年 jiezhang. All rights reserved.
- //
- import UIKit
- class ViewController: UIViewController {
- @IBOutlet weak var weatherInfo: UITextView!
- override func viewDidLoad() {
- super.viewDidLoad()
- updateWeatherInfo()
- }
- override func didReceiveMemoryWarning() {
- super.didReceiveMemoryWarning()
- // Dispose of any resources that can be recreated.
- }
- func updateWeatherInfo() {
- let manager = AFHTTPRequestOperationManager()
- let url = "http://api.openweathermap.org/data/2.5/weather"
- println(url)
- let params:NSDictionary = ["lat":"37.785834", "lon":"-122.406417", "cnt":0]
- println(params)
- manager.GET(url,
- parameters: params,
- success: { (operation: AFHTTPRequestOperation!,
- responseObject: AnyObject!) in
- self.weatherInfo.text = "JSON: " + responseObject.description!
- },
- failure: { (operation: AFHTTPRequestOperation!,
- error: NSError!) in
- self.weatherInfo.text = "Error: " + error.localizedDescription
- })
- }
- <p>}</p>