天天看點

iOS - Swift 與 Objective-C 互相操作前言1、在 Swift 中使用 Objective-C、C 代碼2、在 Objective-C 中使用 Swift 代碼

在 Swift 語言中,我們可以使用 Objective-C、C 語言編寫代碼,我們可以導入任意用 Objective-C 寫的 Cocoa 平台架構、Objective-C 架構或 C 類庫。

1> 在 Swift 項目中建立 OC/C 的 .h 和 .m / .c 檔案,檔案中的格式為其本有的格式。

2> Xcode 提示是否建立 Objective-C bridging 頭檔案,點選 Yes 建立,Xcode 會自動建立一個橋接頭檔案,檔案名的格式是 "項目名-Bridging-Header.h"。

一般情況下,Xcode 輔助生成的橋接頭檔案在編譯屬性裡已經幫我們設定了引用,如果沒有的話需要自己将其配置到項目中,選中項目中的 Targets => Build Setting => Swift Compiler - general => Objective-C Bridging Header 屬性,輕按兩下配置成 “項目名/項目名-Bridging-Header.h” 即可。

iOS - Swift 與 Objective-C 互相操作前言1、在 Swift 中使用 Objective-C、C 代碼2、在 Objective-C 中使用 Swift 代碼

3> 在此橋接頭檔案中添加所建立的 OC/C 檔案的頭檔案( #import "*****.h" )。

4> 在 main.swift 檔案中無需添加頭檔案,直接使用建立的 OC/C 檔案中的類、方法或函數即可。

1> 在 .Swift 檔案中每一個方法和類名前都加 @objc 字首來修飾,以便在 Objective-C 中可以通路。新版 Swift 代碼中已不需要再添加。

2> 在 Swift 項目中建立 OC 的 .h 和 .m 檔案,檔案中的格式為其本有的格式。

3> Xcode 提示是否建立 Objective-C bridging 頭檔案,點選 Yes 建立,Xcode 會自動建立一個橋接頭檔案,檔案名的格式是 "項目名-Bridging-Header.h"。

iOS - Swift 與 Objective-C 互相操作前言1、在 Swift 中使用 Objective-C、C 代碼2、在 Objective-C 中使用 Swift 代碼

4> 在此橋接頭檔案中添加所建立的 OC 檔案的頭檔案( #import "*****.h" )。

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 根據設定的子產品名自動生成的。

iOS - Swift 與 Objective-C 互相操作前言1、在 Swift 中使用 Objective-C、C 代碼2、在 Objective-C 中使用 Swift 代碼

6> 在 main.swift 檔案中無需添加頭檔案,直接使用建立的 OC 檔案中的類、方法。

1、在 OC 項目中建立 .Swift 檔案,檔案中的格式為其本有的格式。

2、Xcode 提示是否建立 Objective-C bridging 頭檔案,點選 Yes 建立,Xcode 會自動建立一個橋接頭檔案,檔案名的格式是 "項目名-Bridging-Header.h"。

iOS - Swift 與 Objective-C 互相操作前言1、在 Swift 中使用 Objective-C、C 代碼2、在 Objective-C 中使用 Swift 代碼

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

iOS - Swift 與 Objective-C 互相操作前言1、在 Swift 中使用 Objective-C、C 代碼2、在 Objective-C 中使用 Swift 代碼

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

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

2、不能在 Objective-C 裡繼承 Swift 類型。

3、資料類型之間需要互相映射關聯。可以 Objective-C 核心類型到 Swift 中的替代類型,例如 NSString 到 String。Objective-C 确定類型到 Swift 中的同等類型,例如 id 到 AnyObject。Objective-C 概念到 Swift 中相比對的概念,如 pointers 到 optionals。

4、不能直接把 C++ 代碼導入 Swift,解決辦法是為 C++ 代碼建立一個 Objective-C 或者 C 的封裝。

繼續閱讀