iOS - Swift 與 Objective-C 互相操做

https://www.cnblogs.com/QianChia/p/5777341.html#_label2html

本文目錄swift

回到頂部框架

前言

  • 在 Swift 語言中,咱們可使用 Objective-C、C 語言編寫代碼,咱們能夠導入任意用 Objective-C 寫的 Cocoa 平臺框架、Objective-C 框架或 C 類庫。

回到頂部函數

 

一、在 Swift 中使用 Objective-C、C 代碼

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

  • 1> 在 Swift 項目中建立 OC/C 的 .h 和 .m / .c 文件,文件中的格式爲其本有的格式。ui

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

    • 通常狀況下,Xcode 輔助生成的橋接頭文件在編譯屬性裏已經幫咱們設置了引用,若是沒有的話須要本身將其配置到項目中,選中項目中的 Targets => Build Setting => Swift Compiler - general => Objective-C Bridging Header 屬性,雙擊配置成 「項目名/項目名-Bridging-Header.h」 便可。.net

      ocswift1

  • 3> 在此橋接頭文件中添加所建立的 OC/C 文件的頭文件( #import "*****.h" )。調試

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

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

  • 1> 在 .Swift 文件中每個方法和類名前都加 @objc 前綴來修飾,以便在 Objective-C 中能夠訪問。新版 Swift 代碼中已不須要再添加。htm

  • 2> 在 Swift 項目中建立 OC 的 .h 和 .m 文件,文件中的格式爲其本有的格式。

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

    • 通常狀況下,Xcode 輔助生成的橋接頭文件在編譯屬性裏已經幫咱們設置了引用,若是沒有的話須要本身將其配置到項目中,選中項目中的 Targets => Build Setting => Swift Compiler - general => Objective-C Bridging Header 屬性,雙擊配置成 「項目名/項目名-Bridging-Header.h」 便可。

      ocswift1

  • 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 根據設置的模塊名自動生成的。

      ocswift2

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

回到頂部

二、在 Objective-C 中使用 Swift 代碼

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

  • 一、在 OC 項目中建立 .Swift 文件,文件中的格式爲其本有的格式。

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

    • 通常狀況下,Xcode 輔助生成的橋接頭文件在編譯屬性裏已經幫咱們設置了引用,若是沒有的話須要本身將其配置到項目中,選中項目中的 Targets => Build Setting => Swift Compiler - general => Objective-C Bridging Header 屬性,雙擊配置成 「項目名/項目名-Bridging-Header.h」 便可。

      ocswift1

  • 三、在 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 根據設置的模塊名自動生成的。

      ocswift2

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

2.2 在 Objective-C 裏使用 Swift 限制

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

  • 二、不能在 Objective-C 裏繼承 Swift 類型。

  • 三、數據類型之間須要互相映射關聯。能夠 Objective-C 核心類型到 Swift 中的替代類型,例如 NSString 到 String。Objective-C 肯定類型到 Swift 中的同等類型,例如 id 到 AnyObject。Objective-C 概念到 Swift 中相匹配的概念,如 pointers 到 optionals。

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

相關文章
相關標籤/搜索