Swift 4 和 Objective-C 混合編程(一) 快速起步

來源:互聯網
上載者:User

標籤:命名方式   import   編譯器   選擇性   工程   

Swift 4 和 Objective-C 在同一個工程裡的混搭編程的方法


你可以在 xcode 裡同時使用 Swift 和 Objective-C(以下簡稱OC)來寫代碼,混搭編程的好處很多,比如允許大量代碼的複用,在效能和開發效率之間找到平衡等。


在 Swift 中引用 OC

我們建立一個工程時,XCode會詢問我們選擇什麼語言進行開發,如果你選擇的是OC,那麼當你第一次建立一個swift檔案時,開發環境會詢問你是否建立一個 .h 檔案。這個 .h 檔案命名方式是 ”#ProjectName#-Bridging-Header.h” 。你可以讓開發環境幫你建立這個檔案,也可以自己建,編譯器只認這個檔案名稱,只要別寫錯就好。


我們稱這個檔案叫橋接檔案,它的作用是把OC代碼選擇性的暴露給swift,讓swift可以調用這些介面。

暴露的方式是通過import,也就是說,你可以在這個 .h 檔案裡 import 任何你想要暴露給swift的代碼,然後就可以在 swift 中訪問了。


嘗試步驟如下:

  1. 開啟xcode,建立一個OC工程 HelloWorld

  2. 建立一個叫 HelloOC 的 OC 類,實現靜態方法 hello,實現代碼 NSLog(”hello, OC.”)

  3. 建立一個叫 HelloSwift 的 swift 類,繼承NSObject,實現靜態函數 hello(),實現代碼 NSLog(”hello, swift.”)

  4. 這時候 xcode 會彈出詢問是否建立檔案 HelloWorld-Bridging-Header.h ,選擇是,如果你點了否,就自己建立一個

  5. 在 HelloWorld-Bridging-Header.h 代碼裡,加入 #import “HelloOC.h”

  6. 在HelloSwift 的 hello 函數裡,在 NSLog(”hello, swift.”) 後追加 HelloOC.hello()


如果編譯成功了,那就說明編譯器允許讓你通過 HelloSwift 調用 HelloOC 的代碼了。

這時候執行程式,會發現輸出終端並沒有列印任何東西。因為程式主體本身並沒有調用 HelloSwift,我們建立的是 OC 工程,所以這時候就需要 OC 來調用 swift代碼了。


在 OC 中引用 swift

當我們建立 HelloSwift 時,xcode 其實做了一些後台工作,除了詢問你是否建立 ”HelloWorld-Bridging-Header.h” 外,它還隱式的建立了一個叫 “HelloWorld-Swift.h” 的標頭檔,記住,這個檔案是 xcode 隱式建立的,所以不要自己去建立這個檔案,很多人查資料發現需要這個標頭檔沒看仔細就自己去建立,結果導致各種編譯不通過。

這個 HelloWorld-Swift 檔案從檔案到代碼都是 xocode 動態產生的,你不需要編輯它,如果感興趣裡面到底寫了什麼,你可以通過 import 這個檔案,Jump To Definition 的方式一探究竟。


當你需要暴露 swift 的類給 OC 調用時,你不需要通過任何逐個 import 的方式,你只要 import “HelloWorld-Swift.h” 即可。

嘗試步驟如下:

  1. 在 ViewController.m 檔案中,引入標頭檔 #import “HelloWorld-Swift.h”

  2. 在 ViewDidLoad 方法的實現中,調用 [HelloSwift hello];


這時候編譯,執行,你可以發現工程列印日誌輸出為:

Hello, Swift.

Hello, OC.


到此為止,我們已經通過 OC 代碼簡單調用了 swift 代碼,又通過 swift 代碼調用了 OC了。但是這隻是最基本的互相調用的案例。在實際工程中存在更多複雜的特殊案例,需要通過其它技術才能解決(比如 命名不相容問題等)。這些留在後面繼續寫。




參考資料:https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html

---

想交流開發技術的朋友可以加群:527628370


本文出自 “智慧咖啡屋” 部落格,請務必保留此出處http://dothebest.blog.51cto.com/699987/1939590

Swift 4 和 Objective-C 混合編程(一) 快速起步

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.