在 OC 中調用 Swift 代碼


1、在 Objective-C 項目中使用 Swift 代碼

  • 1)在 OC 項目中創建 .Swift 文件,文件中的格式為其本有的格式。

  • 2)Xcode 提示是否創建 Objective-C bridging 頭文件,點擊 Yes 創建,Xcode 會自動創建一個橋接頭文件,文件名的格式是 項目名-Bridging-Header.h

    • 一般情況下,Xcode 輔助生成的橋接頭文件在編譯屬性里已經幫我們設置了引用。

    • 如果沒有的話需要自己將其配置到項目中,選中項目中的 Targets => Build Setting => Swift Compiler - general => Objective-C Bridging Header 屬性,雙擊配置成 項目名/項目名-Bridging-Header.h 即可。

  • 3)在 OC 的 .m 文件中添加頭文件 #import "項目名-Swift.h",在此文件中直接使用 .Swift 文件中的類、方法即可。

    • 項目名-Swift.h 這個頭文件是 Xcode 自動產生的。

    • 如果不是引用外部 Swift 語言編寫的框架,不需要我們做過多配置。

    • 但是如果是引用外部框架,需要我們進行配置:選中項目中的 Targets => Build Setting => Packaging => Defines Module 修改成 Yes,然后在 Build Setting => Packaging => Product Module Name,設置一個名稱,例如 SwiftInAction。特別注意的是,這個名稱不能有 - 等字符。這樣我們在 OC 的 .m 文件中就可以添加 SwiftInAction-Swift.h 了,這個名字是 Xcode 根據設置的模塊名自動生成的。

    • 在開始的幾次編譯或者代碼調試中,可能會出錯,提示找不到這個自動生成的文件,一般對項目進行 clean 操作可以解決問題,具體是點擊 Product 菜單下的 clean 菜單項即可。

2、在 Swift 項目中的 Objective-C 代碼中使用 Swift 代碼

  • 1)在 Swift 項目中創建 OC 的 .h.m 文件,文件中的格式為其本有的格式。

  • 2)Xcode 提示是否創建 Objective-C bridging 頭文件,點擊 Yes 創建,Xcode 會自動創建一個橋接頭文件,文件名的格式是 項目名-Bridging-Header.h

    • 一般情況下,Xcode 輔助生成的橋接頭文件在編譯屬性里已經幫我們設置了引用。

    • 如果沒有的話需要自己將其配置到項目中,選中項目中的 Targets => Build Setting => Swift Compiler - general => Objective-C Bridging Header 屬性,雙擊配置成 項目名/項目名-Bridging-Header.h 即可。

  • 3)在此橋接頭文件中添加所創建的 OC/C 文件的引用 #import "*****.h"

  • 4)在 .Swift 文件中每一個方法和類名前都加 @objc 前綴來修飾,以便在 Objective-C 中可以訪問。

  • 5)在 OC 的 .m 文件中添加頭文件 #import "項目名-Swift.h",在此文件中直接使用 .Swift 文件中的類、方法即可。

    • 項目名-Swift.h 這個頭文件是 Xcode 自動產生的。

    • 如果不是引用外部 Swift 語言編寫的框架,不需要我們做過多配置。

    • 但是如果是引用外部框架,需要我們進行配置:選中項目中的 Targets => Build Setting => Packaging => Defines Module 修改成 Yes,然后在 Build Setting => Packaging => Product Module Name,設置一個名稱,例如 SwiftInAction。特別注意的是,這個名稱不能有 - 等字符。這樣我們在 OC 的 .m 文件中就可以添加 SwiftInAction-Swift.h 了,這個名字是 Xcode 根據設置的模塊名自動生成的。

3、在 Objective-C 里使用 Swift 限制

  • 1)一些 Swift 特有的類型,例如元組、泛型、類型別名、嵌套類型等,不能在 Objective-C 里使用。

  • 2)不能在 Objective-C 里繼承 Swift 類型。

  • 3)數據類型之間需要互相映射關聯。

    • Objective-C 核心類型到 Swift 中的替代類型,例如 NSStringString
    • Objective-C 確定類型到 Swift 中的同等類型,例如 idAnyObject
    • Objective-C 概念到 Swift 中相匹配的概念,例如 pointersoptionals
  • 4)不能直接把 C++ 代碼導入 Swift,解決辦法是為 C++ 代碼創建一個 Objective-C 或者 C 的封裝。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM