級別: ★★☆☆☆
標簽:「iOS」「Swift 」「Swift與OC混編」
作者: dac_1033
審校: QiShare團隊
在使用Swift進行iOS開發的過程中,經常涉及到Swift與OC混編的情況,有時主工程是OC的需要另外編入Swift代碼,而有時主工程是Swift的需要另外編入OC代碼。這其中涉及到修改一下Xcode的工程配置,還有一些其他細節,下面我們就來介紹一下。
1. 在同一個工程中的混編
Swift 5.1中,兩種混編的實現步驟:
Swift訪問OC:只需要在橋接文件(ProductName-Bridging-Header.h)中導入需要暴露給Swift的OC類,即可在Swift中訪問相應OC類及方法。
OC訪問Swift:在OC類中導入ProductName-Swift.h文件(Target名稱不同,對應文件名稱也不同,工程配置中能看到),即可訪問Swift中暴露給OC的屬性和方法。
1.1 Swift訪問OC
這篇文章中,我們以一個OC工程為宿主。我們實現一下在Swift類中訪問OC,首先,創建一個空工程:
在工程中創建一個Swift類:
由Xcode引導而創建橋接文件:
在橋接文件中導入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類中導入ProductName-Swift.h(手動輸入沒有提示,并且在編譯之前報紅),然后編譯一下:
即可在ViewController這個OC類中調用Swift:
本例中,點入頭文件QiHybridCompile-Swift.h,在工程里看一下他的定義:
- Swift類中,凡是允許OC訪問的方法,方法前都要加@objc;
- Swift類中用public修飾過的方法,才會出現在ProductName-Swift.h文件中;
- 所有Swift類在ProductName-Swift.h文件都會被自動注冊,以會自動@interface修飾,ProductName-Swift.h文件會自動更新。
2. framework和宿主APP之間的混編
首先,創建一個封裝framework的Swift工程,名為"QiSwiftSdk.xcodeproj",并將它拖進宿主工程中。然后,在宿主工程配置中的BuildPhase下,設置工程依賴關系,如下圖:
本例中,在OC的宿主工程中創建一個Swift類"QSSdkTest",并寫了兩個測試方法,則調用Swift庫時的代碼如下:
- Swift庫中所要暴露的類,類前需要使用關鍵字open修飾;
- Swift庫某個類中供OC調用的方法,依然要用@objc public修飾;
- 本例默認的頭文件"QiSwiftSdk.h"中,沒有做任何操作;
- Swift庫中也可以混編,Swift庫的工程配置中也橋接文件的相關配置。
推薦文章:
iOS UI狀態保存和恢復(三)
iOS UI狀態保存和恢復(二)
iOS UI狀態保存和恢復(一)
iOS 中精確定時的常用方法
Sign In With Apple(一)
算法小專欄:動態規劃(一)
Dart基礎(一)
Dart基礎(二)
Dart基礎(三)
Dart基礎(四)