Swift與OC混編過程中的配置

在使用Swift進行iOS開發(fā)的過程中,經(jīng)常涉及到Swift與OC混編的情況,有時主工程是OC的需要另外編入Swift代碼,而有時主工程是Swift的需要另外編入OC代碼。這其中涉及到修改一下XCode的工程配置,還有一些其他細節(jié),下面我們就來介紹一下。

1. 在同一個工程中的混編

Swift 5.1中,兩種混編的實現(xiàn)步驟:
Swift訪問OC:只需要在橋接文件(ProductName-Bridging-Header.h)中導(dǎo)入需要暴露給Swift的OC類,即可在Swift中訪問相應(yīng)OC類及方法。
OC訪問Swift:在OC類中導(dǎo)入ProductName-Swift.h文件(Target名稱不同,對應(yīng)文件名稱也不同,工程配置中能看到),即可訪問Swift中暴露給OC的屬性和方法。

1.1 Swift訪問OC

這篇文章中,我們以一個OC工程為宿主。我們實現(xiàn)一下在Swift類中訪問OC,首先,創(chuàng)建一個空工程:

在工程中創(chuàng)建一個Swift類:

由XCode引導(dǎo)而創(chuàng)建橋接文件:

在橋接文件中導(dǎo)入OC類頭文件:

我們就可以在宿主工程的這個Swift中直接使用OC類了:

import UIKit

class SwiftClass01: NSObject {

    var con:ViewController?
    
    override init() {
        super.init()
        
        self.con = ViewController()
    }
}


1.2 OC訪問Swift

我們再來看一下在這個宿主工程中,OC類中訪問Swift,在工程配置的Build Settings中搜索Swift Compiler,可以看到Swift與OC混編的兩個配置文件:

在想要訪問Swift方法的OC類中導(dǎo)入ProductName-Swift.h(手動輸入沒有提示,并且在編譯之前報紅),然后編譯一下:

即可在ViewController這個OC類中調(diào)用Swift:

本例中,點入頭文件QiHybridCompile-Swift.h,在工程里看一下他的定義:

  1. Swift類中,凡是允許OC訪問的方法,方法前都要加@objc;
  2. Swift類中用public修飾過的方法,才會出現(xiàn)在ProductName-Swift.h文件中;
  3. 所有Swift類在ProductName-Swift.h文件都會被自動注冊,以會自動@interface修飾,ProductName-Swift.h文件會自動更新。

2. framework和宿主APP之間的混編

首先,創(chuàng)建一個封裝framework的Swift工程,名為"QiSwiftSdk.xcodeproj",并將它拖進宿主工程中。然后,在宿主工程配置中的BuildPhase下,設(shè)置工程依賴關(guān)系,如下圖:

本例中,在OC的宿主工程中創(chuàng)建一個Swift類"QSSdkTest",并寫了兩個測試方法,則調(diào)用Swift庫時的代碼如下:

  1. Swift庫中所要暴露的類,類前需要使用關(guān)鍵字open修飾;
  2. Swift庫某個類中供OC調(diào)用的方法,依然要用@objc public修飾;
  3. 本例默認(rèn)的頭文件"QiSwiftSdk.h"中,沒有做任何操作;
  4. Swift庫中也可以混編,Swift庫的工程配置中也橋接文件的相關(guān)配置。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容