Objective-c代碼如何移植為Swift代碼 Objective-c代碼轉(zhuǎn)移到Swift過(guò)程介紹
遷移工作正好提供了一個(gè)重新審視現(xiàn)有 Objective-C 應(yīng)用程序的機(jī)會(huì),也可以通過(guò) Swift 代碼來(lái)更好的優(yōu)化應(yīng)用程序的體系架構(gòu),邏輯以及性能。直接的說(shuō),你將用先前學(xué)到的 mix and match 以及這兩個(gè)語(yǔ)言間的互操作性來(lái)進(jìn)行增量遷移工作。Mix-and-match 功能使得選擇哪些特性和功能來(lái)用 Swift 來(lái)實(shí)現(xiàn),哪些依然用 Objective-C 來(lái)實(shí)現(xiàn)變得簡(jiǎn)單。Swift 和 Objective-C 的互用性又使得將這些功能集成到 Objective-C 變得并不困難。通過(guò)這些工具可以開(kāi)放 Swift 的擴(kuò)展功能并集成到現(xiàn)有的 Objective-C 項(xiàng)目中而完全不必立刻使用 Swift 重寫(xiě)整個(gè)項(xiàng)目。
為你的Objective-C代碼做好遷移準(zhǔn)備
在開(kāi)始遷移你的代碼之前,請(qǐng)確保你的 Objective-C 和 Swift 代碼間有著最佳兼容性。這意味著整理并使用 Objective-C 的現(xiàn)代化特性來(lái)優(yōu)化你的現(xiàn)有項(xiàng)目。為了和 Swift 進(jìn)行更容易的無(wú)縫交互,你的現(xiàn)有代碼需要遵循現(xiàn)代編碼實(shí)踐。這里有個(gè)簡(jiǎn)短的適配練習(xí)列表,參看Adopting Mordern Objective-C。
遷移過(guò)程
最有效遷移代碼的方式是基于逐個(gè)文件的方式,即一次完成一個(gè)類(lèi)。由于你不能在 Objective-C 中繼承 Swift 類(lèi), 最好選擇一個(gè)沒(méi)有子類(lèi)的(譯者:從類(lèi)的繼承角度來(lái)看,應(yīng)該先從類(lèi)族樹(shù)的葉子節(jié)點(diǎn)開(kāi)始,自底向上的進(jìn)行遷移操作)。你就可以用單個(gè).swift文件來(lái)代替對(duì)應(yīng)的.m和.h文件了。你所有的實(shí)現(xiàn)代碼和接口將直接放進(jìn)單個(gè) Swift 文件。你不用再創(chuàng)建頭文件了;Xcode 會(huì)在你需要引用的時(shí)候自動(dòng)生成頭文件。(譯者:當(dāng)然這實(shí)在xcode內(nèi)部機(jī)制完成的了,對(duì)開(kāi)發(fā)者是透明的)
準(zhǔn)備工作
•在 Xcode 中:File>New>File>(iOS 或者 OS X) > Other > Swift 為對(duì)應(yīng)的 Objective-C.m 和.h文件創(chuàng)建一個(gè) Swift 類(lèi)。
•導(dǎo)入相關(guān)系統(tǒng)框架。
•如果你希望在 Swift 文件中訪問(wèn) Objective-C 代碼的話,可以填入一個(gè) Objective-C 橋接頭。具體的操作步驟,請(qǐng)看 Importing Code from Within the Same App Target。
•為使你的 Swift 類(lèi)能在 Objective-C 中訪問(wèn)使用,可以繼承 Objective-C 類(lèi),或者標(biāo)記上@objc屬性。為類(lèi)指定特殊的名稱(chēng),以在 Objective-C 中使用,標(biāo)記上@objc(#name#), <#name#>就是在 Objective-C 中引用的 Swift 類(lèi)名。 更多信息,請(qǐng)看Swift Type Compatibility。
開(kāi)始工作
•你可以通過(guò)繼承 Objective-C 類(lèi),適配 Objective-C 協(xié)議,或者更多的方式,來(lái)讓 Swift 類(lèi)集成 Objective-C 行為。更多信息,請(qǐng)看Writing Swift Classes with Objective-C Behavior
•當(dāng)你使用 Objective-C APIs 的時(shí)候,你需要知道 Swift 是怎樣來(lái)翻譯某些 Objective-C 特性的。更多信息,請(qǐng)看Interacting with Objective-C APIs
•當(dāng)用 Swift 編寫(xiě)用到 Cocoa 框架的代碼時(shí),記住某些類(lèi)型是被橋接的,意味著你可以使用某些 Swift 類(lèi)型來(lái)替代 Objective-C 類(lèi)型。更多信息,請(qǐng)看Working with Cocoa Data Types
•當(dāng)你在 Swift 中運(yùn)用 Cocoa設(shè)計(jì)模式得時(shí)候,請(qǐng)看 Adopting Cocoa Design Patterns獲取更多的通用設(shè)計(jì)模式的轉(zhuǎn)換信息。
•對(duì)于打算將項(xiàng)目從 Objective-C 轉(zhuǎn)換到 Swfit 的人,請(qǐng)看 Propeties。
•在必要的時(shí)候,請(qǐng)為 Swift 的屬性或方法,通過(guò)@objc(<#name#>)屬性來(lái)提供 Objective-C 名稱(chēng),就像這樣:
var enabled: Bool {
@objc(isEnabled) get {
/* ... */
}
}
•分別用func和class func來(lái)表示 instance(-) 和 class(+) 方法。
•聲明簡(jiǎn)單的宏來(lái)作為常量,將復(fù)雜的宏轉(zhuǎn)換為函數(shù)。
大功告成
•在你的 Objective-C 代碼中更新 import 語(yǔ)句為 #import "模塊名-Swift.h",在Importing Code from Within the Same App Target中曾有提到。
•在Target 的成員選擇框中去掉勾選框來(lái)移除原始的 Objective-C.m文件.不要立刻刪除.m和.h文件,以備解決問(wèn)題用。
•如果你給 Swift 類(lèi)起了一個(gè)不同的名字,請(qǐng)使用 Swift 類(lèi)名代替 Objective-C 名。
問(wèn)題解決提示
對(duì)于不同的項(xiàng)目,遷移的經(jīng)歷是不盡相同的。無(wú)論怎樣,都有一些通用的步驟和工具能幫你解決代碼遷移時(shí)碰到的問(wèn)題:
•記?。耗悴荒茉?Objective-C 中繼承 Swift 類(lèi)。因此,被你遷移的類(lèi)不能有任何的 Objective-C 子類(lèi)存在于你的應(yīng)用中。
•當(dāng)你遷移一個(gè)類(lèi)到 Swift 的時(shí)候,你必須從 target 中移除相關(guān)的.m文件,以避免編譯時(shí)提示出現(xiàn)重復(fù)的符號(hào)等編譯錯(cuò)誤。
•為了在 Objective-C 中可以訪問(wèn)并使用,Swift 類(lèi)必須是一個(gè) Objective-C 類(lèi)的子類(lèi),或者被標(biāo)記為@objc。
•當(dāng)你在 Objective-C 中使用 Swift 代碼的時(shí)候,記住 Objective-C 不能理解那些 Swift 的某些特性,請(qǐng)看Using Swift from Objective-C。
•可以通過(guò)Commond + 點(diǎn)擊一個(gè) Swift 類(lèi)名來(lái)查看他生成的頭文件。
•可以通過(guò)Option + 點(diǎn)擊一個(gè)符號(hào)來(lái)查看更詳細(xì)的信息,比如它的類(lèi)型,屬性以及文檔注釋等。
- 在一個(gè)項(xiàng)目中同時(shí)使用Swift和Objective-C代碼混合編程的方法
- Swift調(diào)用Objective-C編寫(xiě)的API實(shí)例
- 在Swift中使用Objective-C編寫(xiě)類(lèi)、繼承Objective-C類(lèi)
- Swift能代替Objective-C嗎?
- Swift調(diào)用Objective-C代碼
- Swift、Objective-C、Cocoa混合編程設(shè)置指南
- Objective-C中的block與Swift中的尾隨閉包使用教程
- Swift和Objective-C 混編注意事項(xiàng)
- Swift如何調(diào)用Objective-C的可變參數(shù)函數(shù)詳解
- Objective-C和Swift的轉(zhuǎn)換速查手冊(cè)(推薦)
相關(guān)文章
switch實(shí)現(xiàn)一個(gè)兩數(shù)的運(yùn)算代碼示例
這篇文章主要介紹了switch實(shí)現(xiàn)一個(gè)兩數(shù)的運(yùn)算代碼示例,需要的朋友可以參考下2017-06-06
詳解Swift編程中的for循環(huán)的編寫(xiě)方法
這篇文章主要介紹了Swift編程中的for循環(huán)的編寫(xiě)方法,包括相關(guān)的for...in循環(huán),需要的朋友可以參考下2015-11-11
SwiftUI?引導(dǎo)頁(yè)界面實(shí)現(xiàn)示例
這篇文章主要為大家介紹了SwiftUI?引導(dǎo)頁(yè)界面實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
實(shí)例講解Swift中引用類(lèi)型的ARC自動(dòng)引用計(jì)數(shù)
自動(dòng)引用計(jì)數(shù)是在Objective-C中就有的特性,用來(lái)輔助管理對(duì)象的引用,這里我們就來(lái)以實(shí)例講解Swift中引用類(lèi)型的ARC自動(dòng)引用計(jì)數(shù):2016-07-07
Swift 3.1聊天界面鍵盤(pán)效果的實(shí)現(xiàn)詳解
這篇文章主要給大家介紹了Swift 3.1聊天界面鍵盤(pán)效果實(shí)現(xiàn)的相關(guān)資料,文中介紹的非常詳細(xì),相信對(duì)大家的學(xué)習(xí)或者工作具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-04-04

