Swift編程的技巧分享
大?。?/span>0.6 MB 人氣: 2017-10-12 需要積分:1
推薦 + 挑錯(cuò) + 收藏(0) + 用戶(hù)評(píng)論(0)
標(biāo)簽:SWIFT(23615)
自2014年9月1.0版發(fā)布后,Savvy的應(yīng)用開(kāi)發(fā)團(tuán)隊(duì)就開(kāi)始在iOS項(xiàng)目中實(shí)驗(yàn)并使用Swift。不過(guò)由于Swift相對(duì)還很新,當(dāng)時(shí)大多項(xiàng)目仍在使用Objective-C;自從2015年9月Swift 2.0版本發(fā)布以來(lái),我們已經(jīng)開(kāi)始改用Swift來(lái)編譯新的項(xiàng)目了。實(shí)際上在2016年1月,我們大多數(shù)的Swift項(xiàng)目都是iOS應(yīng)用類(lèi)的。相對(duì)于Objective-C,Swift是一種編譯代碼時(shí)速度更快、安全性與可靠性更高、同時(shí)具有可預(yù)測(cè)性的語(yǔ)言。下面我們列出了在實(shí)踐中使用這種新語(yǔ)言時(shí),所獲取一些Swift使用技巧。這些技巧有助于讓開(kāi)發(fā)者編寫(xiě)出更干凈的代碼,并能幫助更熟悉Objective-C的程序員適應(yīng)Swift編程,同時(shí)適用于在Swift上具有各種背景經(jīng)歷的人,請(qǐng)繼續(xù)往下看。
章節(jié)的順序是按照使用者對(duì)Swift的熟悉程度來(lái)排列的。第一部分是針對(duì)不太了解Swift的人,第二部分是針對(duì)初級(jí)入門(mén)者,而最后一部分是對(duì)于已在使用Swift的人。
你應(yīng)當(dāng)了解,但有可能不知道的Swift技巧
提高常數(shù)的可讀性
在Swift中使用struct的簡(jiǎn)潔辦法,就是在應(yīng)用中制作一個(gè)適用所有常數(shù)的文件。由于Swift允許我們嵌用下面的結(jié)構(gòu),這種辦法非常有用:
import Foundation structConstants { structFoursquareApi { staticletBaseUrl = “https://api.foursquare.com/v2/”} structTwitterApi { staticletBaseUrl = “https://api.twitter.com/1.1/”} structConfiguration { staticletUseWorkaround = true} }
嵌套讓我們可以為常數(shù)生成一個(gè)命名空間(namespace)。例如:我們可以使用Constants.FoursquareApi.BaseUrl來(lái)訪(fǎng)問(wèn)Foursquare的BaseUrl常數(shù),這樣會(huì)使得數(shù)據(jù)可讀性更高,并為相關(guān)的常數(shù)提供一系列封裝。
為了提高性能,要避免NSObject與@objc
Swift允許我們將分類(lèi)進(jìn)行擴(kuò)展,從NSObject到獲取對(duì)象的Objective-Cruntime系統(tǒng)功能。還允許我們用@objc來(lái)注釋Swift方法,以便在Objective-C runtime中使用。
支持Objective-C runtime,代表著系統(tǒng)不再通過(guò)通過(guò)靜態(tài)或vtable分配,而是動(dòng)態(tài)分配來(lái)調(diào)用方法。結(jié)果就是:在調(diào)用支持Objective-C運(yùn)行的方法時(shí),性能損失會(huì)高達(dá)四倍。在實(shí)際應(yīng)用中,這種情況對(duì)性能的影響也許微不足道,不過(guò)這樣一來(lái),我們就知道通過(guò)Swift執(zhí)行方法調(diào)用要比使用Objective-C快四倍。
在Swift中使用方法調(diào)配(Method Swizzling)
方法調(diào)配是替換一個(gè)已存在的方法實(shí)現(xiàn)。如果對(duì)此不熟悉,可以閱讀這篇文章。Swift優(yōu)化后,不再像Objective-C中那樣,在runtime尋找方法的位置,而是直接調(diào)用內(nèi)存地址。因此默認(rèn)情況下,在Swift類(lèi)中調(diào)配無(wú)法起效,除非:
用動(dòng)態(tài)關(guān)鍵字禁用這種優(yōu)化。這是最佳選擇,如果數(shù)據(jù)庫(kù)完全以Swift構(gòu)建的話(huà),這種選擇也是最合理的方式。擴(kuò)展NSObject。如果單純?yōu)榱朔椒ㄕ{(diào)配的話(huà),不要用這種方式(而要采用動(dòng)態(tài)的)。需要了解:在將NSObject作為基礎(chǔ)類(lèi)的已存在類(lèi)中,方法調(diào)配是有效的,不過(guò)最好使用動(dòng)態(tài)選擇的方法。在要調(diào)配的方法中使用@objc注釋。如果我們想要調(diào)配的方法同時(shí)也需要使用Objective-C的代碼,那么這種方法是最合適的。
更新:根據(jù)要求,我們?cè)黾恿艘粋€(gè)完全使用Swift的調(diào)用樣例。在這個(gè)樣例中仍需要Objective-C runtime,不過(guò)類(lèi)并非繼承自NSObject,方法也未標(biāo)記成@objc。
importUIKit classAwesomeClass{dynamic func originalFunction()-》String { return“originalFunction”} dynamic func swizzledFunction()-》String { return“swizzledFunction”} } letawesomeObject = AwesomeClass() print(awesomeObject.originalFunction()) //prints: “originalFunction”letaClass = AwesomeClass.self letoriginalMethod = class_getInstanceMethod(aClass, “originalFunction”) letswizzledMethod = class_getInstanceMethod(aClass, “swizzledFunction”) method_exchangeImplementations(originalMethod, swizzledMethod) print(awesomeObject.originalFunction()) //prints: “swizzledFunction”
入門(mén)者所需的Swift技巧
清理異步代碼
Swift在編寫(xiě)補(bǔ)齊函數(shù)(completion function)上語(yǔ)法非常簡(jiǎn)潔。在Objective-C中有completion block,不過(guò)出現(xiàn)的很晚,語(yǔ)法也有些粗糙,如下:
?。踫elfloginViaHttpWithRequest:request completionBlockWithSuccess:^(LoginOperation *operation, idresponseObject) { [selfshowMainScreen]; } failure:^(LoginOperation *operation, NSError*error) { [selfshowFailedLogin]; }];
在Swift中有一種更簡(jiǎn)單的新型閉包語(yǔ)法。任何將閉包作為末尾參數(shù)的方法都可以使用Swift的新語(yǔ)法,讓回調(diào)更簡(jiǎn)潔,如下:
loginViaHttp(request) { responseinifresponse.success { showMainScreen() } else{ showFailedLogin() } }
控制對(duì)代碼的訪(fǎng)問(wèn)
應(yīng)該堅(jiān)持用合適的訪(fǎng)問(wèn)控制修飾符(access control modifier)來(lái)封裝代碼。如果封裝的好,無(wú)需記下思維過(guò)程,也無(wú)需詢(xún)問(wèn)代碼編寫(xiě)者,就能理解這段代碼是如何交互的。
Swift常見(jiàn)的訪(fǎng)問(wèn)控制機(jī)制有三種:私人訪(fǎng)問(wèn)、內(nèi)部訪(fǎng)問(wèn)和公共訪(fǎng)問(wèn)。不過(guò)Swift中并沒(méi)有常見(jiàn)于其它面向?qū)ο笳Z(yǔ)言中的protected訪(fǎng)問(wèn)控制修飾符。為什么會(huì)這樣呢?那是因?yàn)樵谧宇?lèi)中通過(guò)新的公共方法或?qū)傩?,就可以顯示protected方法或?qū)傩?,因此?shí)際上保護(hù)是無(wú)效的。而且由于從任何地方都能重寫(xiě),因此protected并未給Swift編譯器開(kāi)啟優(yōu)化的機(jī)會(huì)。最后,由于protected阻止子類(lèi)helper訪(fǎng)問(wèn)子類(lèi)能夠訪(fǎng)問(wèn)的信息,會(huì)讓封裝變差。想要了解Swift團(tuán)隊(duì)關(guān)于protected更多的想法,請(qǐng)點(diǎn)擊這里查看。
非常好我支持^.^
(0) 0%
不好我反對(duì)
(0) 0%
下載地址
Swift編程的技巧分享下載
相關(guān)電子資料下載
- 拿下國(guó)家級(jí)信創(chuàng)認(rèn)證!中科馭數(shù)KPU SWIFT-2200N成為國(guó)內(nèi)首款滿(mǎn)足金融業(yè)嚴(yán)苛要求的 163
- 中科馭數(shù)基于DPU的思威SWIFT系列智能網(wǎng)卡與統(tǒng)信軟件產(chǎn)品完成適配 176
- 如何使用Swift提高代碼質(zhì)量 126
- 積木易搭Magic Swift Plus為雕刻工藝品精雕復(fù)刻提供三維數(shù)字化解決方案 274
- 詞法分析-Antlr-1 235
- Kotlin 1.8.0發(fā)布,改進(jìn)性能和Swift的互操作性 1044
- Swift 2023:強(qiáng)調(diào)并發(fā)、泛型和C++互操作性,開(kāi)發(fā)Swift解析器 300
- 彩色套件創(chuàng)建全彩3D模型MagicSwiftPlus僅千元級(jí) 432
- Swift的使用體驗(yàn)與生態(tài)發(fā)展之路 981
- 如何加速apply函數(shù)600倍的技巧 627