級(jí)別: ★★☆☆☆
標(biāo)簽:「iOS」「Swift 」「Swift與OC混編」
作者: dac_1033
審校: QiShare團(tuán)隊(duì)
在使用Swift進(jìn)行iOS開發(fā)的過程中,經(jīng)常涉及到Swift與OC混編的情況,有時(shí)主工程是OC的需要另外編入Swift代碼,而有時(shí)主工程是Swift的需要另外編入OC代碼。這其中涉及到修改一下Xcode的工程配置,還有一些其他細(xì)節(jié),下面我們就來介紹一下。
1. 在同一個(gè)工程中的混編
Swift 5.1中,兩種混編的實(shí)現(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名稱不同,對(duì)應(yīng)文件名稱也不同,工程配置中能看到),即可訪問Swift中暴露給OC的屬性和方法。
1.1 Swift訪問OC
這篇文章中,我們以一個(gè)OC工程為宿主。我們實(shí)現(xiàn)一下在Swift類中訪問OC,首先,創(chuàng)建一個(gè)空工程:
在工程中創(chuàng)建一個(gè)Swift類:
由Xcode引導(dǎo)而創(chuàng)建橋接文件:
在橋接文件中導(dǎo)入OC類頭文件:
我們就可以在宿主工程的這個(gè)Swift中直接使用OC類了:
import UIKit
class SwiftClass01: NSObject {
var con:ViewController?
override init() {
super.init()
self.con = ViewController()
}
}
1.2 OC訪問Swift
我們?cè)賮砜匆幌略谶@個(gè)宿主工程中,OC類中訪問Swift,在工程配置的Build Settings中搜索Swift Compiler,可以看到Swift與OC混編的兩個(gè)配置文件:
在想要訪問Swift方法的OC類中導(dǎo)入ProductName-Swift.h(手動(dòng)輸入沒有提示,并且在編譯之前報(bào)紅),然后編譯一下:
即可在ViewController這個(gè)OC類中調(diào)用Swift:
本例中,點(diǎn)入頭文件QiHybridCompile-Swift.h,在工程里看一下他的定義:
- Swift類中,凡是允許OC訪問的方法,方法前都要加@objc;
- Swift類中用public修飾過的方法,才會(huì)出現(xiàn)在ProductName-Swift.h文件中;
- 所有Swift類在ProductName-Swift.h文件都會(huì)被自動(dòng)注冊(cè),以會(huì)自動(dòng)@interface修飾,ProductName-Swift.h文件會(huì)自動(dòng)更新。
2. framework和宿主APP之間的混編
首先,創(chuàng)建一個(gè)封裝framework的Swift工程,名為"QiSwiftSdk.xcodeproj",并將它拖進(jìn)宿主工程中。然后,在宿主工程配置中的BuildPhase下,設(shè)置工程依賴關(guān)系,如下圖:
本例中,在OC的宿主工程中創(chuàng)建一個(gè)Swift類"QSSdkTest",并寫了兩個(gè)測(cè)試方法,則調(diào)用Swift庫時(shí)的代碼如下:
- Swift庫中所要暴露的類,類前需要使用關(guān)鍵字open修飾;
- Swift庫某個(gè)類中供OC調(diào)用的方法,依然要用@objc public修飾;
- 本例默認(rèn)的頭文件"QiSwiftSdk.h"中,沒有做任何操作;
- Swift庫中也可以混編,Swift庫的工程配置中也橋接文件的相關(guān)配置。
推薦文章:
iOS UI狀態(tài)保存和恢復(fù)(三)
iOS UI狀態(tài)保存和恢復(fù)(二)
iOS UI狀態(tài)保存和恢復(fù)(一)
iOS 中精確定時(shí)的常用方法
Sign In With Apple(一)
算法小專欄:動(dòng)態(tài)規(guī)劃(一)
Dart基礎(chǔ)(一)
Dart基礎(chǔ)(二)
Dart基礎(chǔ)(三)
Dart基礎(chǔ)(四)