swift專案呼叫OC庫 和OC專案 在swift檔案裡面全域性呼叫OC庫

Swift_Xu發表於2017-12-14

最近比較清閒,就把以前學習的過程記錄下吧,多少年後如果能在網際網路上找到自己的痕跡,想想還是一件蠻值得高興的事情。

正好這兩天加了一個swift學習群想繼續學習swift,發現好多swift初學者,在混編這塊還不是很清楚,當初自己初學的時候也經歷了這麼一個痛苦的過程,所以把自己的痛苦過程也寫一下。當然這也是第一次寫文章,想想有點小激動呢,各位看官老爺和大神們,請多多關照,不要罵的太慘...

1. 建立swift 專案

這裡以pod整合為前提,怎樣全域性使用一些第三方庫,以我們常用的AFN為前提

pod 'AFNetworking'

如果不指定版本號,pod 會自動幫助我們下載最新的版本

好了, 有了swift專案,如果我們需要使用OC的庫,就需要用到橋接檔案。如果建立的是OC的專案,那麼我們使用swift檔案的時候Xcode會詢問我們是否創立橋接檔案。當然如果建立的是swift的專案,那麼我們就需要去手動建立橋接檔案。ProjiectName-Bridging-Header.h  蘋果推薦的命名格式


swift專案呼叫OC庫 和OC專案 在swift檔案裡面全域性呼叫OC庫
這個地方就是我們需要新增庫的地方


不要忘了設定橋接檔案的路徑


swift專案呼叫OC庫 和OC專案 在swift檔案裡面全域性呼叫OC庫
TARGETS->Build Setting -> Swift Compiler -General 設定路徑


這個時候你會發現在swift檔案裡面還是呼叫不了,還需要import 。那這就不是我們想要的效果了,接著往下走。


swift專案呼叫OC庫 和OC專案 在swift檔案裡面全域性呼叫OC庫
TARGETS->Build Phases -> Link Binary With Libraries  進入到這裡,點選+號

把我們需要的第三方庫新增進去


swift專案呼叫OC庫 和OC專案 在swift檔案裡面全域性呼叫OC庫
TARGETS->Build Setting  需要注意要選recursive

把路徑設定好,Build一下 ,大功告成

2.建立OC的專案

oc的專案我們使用第三方庫SVProgressHUD,使用pod整合後,我們建立一個Svp.swift檔案,這個時候Xcode會詢問我們是否建立橋接檔案


swift專案呼叫OC庫 和OC專案 在swift檔案裡面全域性呼叫OC庫
點選Create Bridging Header 後系統會幫我們建立橋接檔案

然後我們到TARGETS -> Build Setting -Swift Compiler -General 裡面會發現橋接檔案的路徑已經寫上去了。但是如果我們選擇Don·t(那個符號不會打。。。)Create 而去手動建立的時候 我們就需要自己去把路徑給填寫上

然後同樣的來到Build Setting 下面把路徑設定下


swift專案呼叫OC庫 和OC專案 在swift檔案裡面全域性呼叫OC庫
這步跟swift專案引用OC庫的設定一樣

然後在橋接檔案裡面寫上我們需要的庫

#import "SVProgressHUD.h"

在建立的swift 檔案裡面 直接呼叫SVP的類  ,OK  是可以的


# OC 呼叫Swift 

上面說的都是swift 怎麼呼叫oc  ,這裡說一下oc呼叫swift

一般OC裡面我們使用pch檔案去管理我們全工程需要用到的一些配置,.h檔案之類的。如果想做到OC去呼叫swift,那麼只需要在pch檔案匯入 "ProjectName-Swift.h" 格式的檔案就可以了。這個檔案專案裡面找不到的,但是它確實是存在的,我們可以點進去看一下


swift專案呼叫OC庫 和OC專案 在swift檔案裡面全域性呼叫OC庫
它其實就是把swift檔案的東西轉換成了OC

然後我們在ViewController 去呼叫swift檔案裡面的類

swift專案呼叫OC庫 和OC專案 在swift檔案裡面全域性呼叫OC庫
可以呼叫

那是不是所有的swift裡面定義的類 OC都能去呼叫呢?我們在swift檔案裡面定義一個類


swift專案呼叫OC庫 和OC專案 在swift檔案裡面全域性呼叫OC庫
swift中定義的類如果沒有繼承,那它就是一個基類

定義了一個Da 的類,它是一個基類,然後我們再去OC的ViewController 裡面去呼叫,發現呼叫不了。但是如果當Da 這個類去繼承NSObject 或者UIViewcontroller 或者任意一個OC的類 ,我們都能去呼叫它。這裡我們就知道了,OC中想要呼叫swift定義的類,那這個類要繼承於OC中定義的類。我們都知道,OC的程式碼都能很好橋接到swift中,所以我們swift所使用的類都能繼承於OC,但是反過來,OC去繼承swift中定義的類都是不行的。

還有就是如果 Swift 類中的成員或者方法需要在 OC 中使用,要使用@objc修飾符。

當然需要注意的東西還有很多,這裡一時半會也說不完,以後有機會再慢慢寫吧



好吧,寫的都是一些簡單的東西, 其實這些東西大家可能都會,當然這篇文章最主要還是寫給自己的,一個鞭策自己,讓自己養成一個良好習慣的開端吧。當然如果有什麼不對的地方,希望大家多多指出

相關文章