1. 程式人生 > >Swift基礎--呼叫第三方OC專案

Swift基礎--呼叫第三方OC專案

第一步:建立和配置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,但是過程曲折,最後一直報

ld: 218 duplicate symbols for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我也沒有辦法了就把第三方專案原始碼拷貝到自己的專案裡面,上圖也可以看到我拷貝的事AFNetworking專案,然後在把原始碼加入到Build Phases--Compile Sources裡面

第三步:修改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
               
        })
    }

}

第五步:執行介面


下載地址:http://pan.baidu.com/s/1c0myIbA