Swift與OC混編過程中的配置

級(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

我們再來看一下在這個(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,在工程里看一下他的定義:

  1. Swift類中,凡是允許OC訪問的方法,方法前都要加@objc;
  2. Swift類中用public修飾過的方法,才會(huì)出現(xiàn)在ProductName-Swift.h文件中;
  3. 所有Swift類在ProductName-Swift.h文件都會(huì)被自動(dòng)注冊,以會(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è)測試方法,則調(diào)用Swift庫時(shí)的代碼如下:

  1. Swift庫中所要暴露的類,類前需要使用關(guān)鍵字open修飾;
  2. Swift庫某個(gè)類中供OC調(diào)用的方法,依然要用@objc public修飾;
  3. 本例默認(rèn)的頭文件"QiSwiftSdk.h"中,沒有做任何操作;
  4. 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ǔ)(四)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在使用Swift進(jìn)行iOS開發(fā)的過程中,經(jīng)常涉及到Swift與OC混編的情況,有時(shí)主工程是OC的需要另外編入Swi...
    大成小棧閱讀 851評(píng)論 0 1
  • 概述 利用runtime特性實(shí)現(xiàn)iOS項(xiàng)目的組件化開發(fā),是由@casatwy大神提出來的,在他的博客中具體介紹...
    Mr杰杰閱讀 1,705評(píng)論 2 9
  • 環(huán)境介紹: mac OS sierra 10.12.6Xcode9(Version 9.0 (9A235))OC的...
    002and001閱讀 25,823評(píng)論 7 50
  • 前言: Swift語言出來后,可能新的項(xiàng)目直接使用Swift來開發(fā),但可能在過程中會(huì)遇到一些情況,某些已用OC寫好...
    瘋狂的電腦閱讀 2,444評(píng)論 0 9
  • 痛苦中改變自己的人是快樂的,那些知道通過蛻變自己、成長自己,讓自己擺脫低端人生的人是最懂人生的人。 出身富貴,不知...
    王迎濤閱讀 495評(píng)論 0 0

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