色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

您好,歡迎來電子發燒友網! ,新用戶?[免費注冊]

您的位置:電子發燒友網>源碼下載>數值算法/人工智能>

Swift編程的技巧分享

大?。?/span>0.6 MB 人氣:0 2017-10-12 需要積分:1
自2014年9月1.0版發布后,Savvy的應用開發團隊就開始在iOS項目中實驗并使用Swift。不過由于Swift相對還很新,當時大多項目仍在使用Objective-C;自從2015年9月Swift 2.0版本發布以來,我們已經開始改用Swift來編譯新的項目了。實際上在2016年1月,我們大多數的Swift項目都是iOS應用類的。
  相對于Objective-C,Swift是一種編譯代碼時速度更快、安全性與可靠性更高、同時具有可預測性的語言。下面我們列出了在實踐中使用這種新語言時,所獲取一些Swift使用技巧。這些技巧有助于讓開發者編寫出更干凈的代碼,并能幫助更熟悉Objective-C的程序員適應Swift編程,同時適用于在Swift上具有各種背景經歷的人,請繼續往下看。
  章節的順序是按照使用者對Swift的熟悉程度來排列的。第一部分是針對不太了解Swift的人,第二部分是針對初級入門者,而最后一部分是對于已在使用Swift的人。
  你應當了解,但有可能不知道的Swift技巧
  提高常數的可讀性
  在Swift中使用struct的簡潔辦法,就是在應用中制作一個適用所有常數的文件。由于Swift允許我們嵌用下面的結構,這種辦法非常有用:
  import Foundation structConstants { structFoursquareApi { staticletBaseUrl = “https://api.foursquare.com/v2/”} structTwitterApi { staticletBaseUrl = “https://api.twitter.com/1.1/”} structConfiguration { staticletUseWorkaround = true} }
  嵌套讓我們可以為常數生成一個命名空間(namespace)。例如:我們可以使用Constants.FoursquareApi.BaseUrl來訪問Foursquare的BaseUrl常數,這樣會使得數據可讀性更高,并為相關的常數提供一系列封裝。
  為了提高性能,要避免NSObject與@objc
  Swift允許我們將分類進行擴展,從NSObject到獲取對象的Objective-Cruntime系統功能。還允許我們用@objc來注釋Swift方法,以便在Objective-C runtime中使用。
  支持Objective-C runtime,代表著系統不再通過通過靜態或vtable分配,而是動態分配來調用方法。結果就是:在調用支持Objective-C運行的方法時,性能損失會高達四倍。在實際應用中,這種情況對性能的影響也許微不足道,不過這樣一來,我們就知道通過Swift執行方法調用要比使用Objective-C快四倍。
  在Swift中使用方法調配(Method Swizzling)
  方法調配是替換一個已存在的方法實現。如果對此不熟悉,可以閱讀這篇文章。Swift優化后,不再像Objective-C中那樣,在runtime尋找方法的位置,而是直接調用內存地址。因此默認情況下,在Swift類中調配無法起效,除非:
  用動態關鍵字禁用這種優化。這是最佳選擇,如果數據庫完全以Swift構建的話,這種選擇也是最合理的方式。擴展NSObject。如果單純為了方法調配的話,不要用這種方式(而要采用動態的)。需要了解:在將NSObject作為基礎類的已存在類中,方法調配是有效的,不過最好使用動態選擇的方法。在要調配的方法中使用@objc注釋。如果我們想要調配的方法同時也需要使用Objective-C的代碼,那么這種方法是最合適的。
  更新:根據要求,我們增加了一個完全使用Swift的調用樣例。在這個樣例中仍需要Objective-C runtime,不過類并非繼承自NSObject,方法也未標記成@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”
  入門者所需的Swift技巧
  清理異步代碼
  Swift在編寫補齊函數(completion function)上語法非常簡潔。在Objective-C中有completion block,不過出現的很晚,語法也有些粗糙,如下:
 ?。踫elfloginViaHttpWithRequest:request completionBlockWithSuccess:^(LoginOperation *operation, idresponseObject) { [selfshowMainScreen]; } failure:^(LoginOperation *operation, NSError*error) { [selfshowFailedLogin]; }];
  在Swift中有一種更簡單的新型閉包語法。任何將閉包作為末尾參數的方法都可以使用Swift的新語法,讓回調更簡潔,如下:
  loginViaHttp(request) { responseinifresponse.success { showMainScreen() } else{ showFailedLogin() } }
  控制對代碼的訪問
  應該堅持用合適的訪問控制修飾符(access control modifier)來封裝代碼。如果封裝的好,無需記下思維過程,也無需詢問代碼編寫者,就能理解這段代碼是如何交互的。
  Swift常見的訪問控制機制有三種:私人訪問、內部訪問和公共訪問。不過Swift中并沒有常見于其它面向對象語言中的protected訪問控制修飾符。為什么會這樣呢?那是因為在子類中通過新的公共方法或屬性,就可以顯示protected方法或屬性,因此實際上保護是無效的。而且由于從任何地方都能重寫,因此protected并未給Swift編譯器開啟優化的機會。最后,由于protected阻止子類helper訪問子類能夠訪問的信息,會讓封裝變差。想要了解Swift團隊關于protected更多的想法,請點擊這里查看。
 
 

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

用戶評論

      ?
      主站蜘蛛池模板: 超碰97视频在线观看 | 色综合精品无码一区二区三区 | 日韩欧美视频一区二区在线观看 | 手机毛片免费看 | 亚洲人成在线播放网站岛国 | 国产免费阿v精品视频网址 国产免费69成人精品视频 | 成人免费小视频 | 国产午夜精品自在自线之la | 久久机热视频免费 | 亚洲国产中文在线视频免费 | 有码 亚洲 制服 国产 在线 | 亚洲欧洲精品成人久久曰影片 | 成人国产亚洲欧美成人综合网 | 欧美日韩精品一区二区三区高清视频 | 麻豆一区二区三区蜜桃免费 | 20岁αsrian男同志免费 | 超清无码波多野吉衣与黑人 | 果冻传媒在线播放 免费观看 | 久热人人综合人人九九精品视频 | 69久久国产精品热88人妻 | 97国产在线播放 | 在线观看免费亚洲 | 把手戳进美女尿口里动态图 | 亚洲AV无码国产精品色午夜情 | 边摸边吃奶边做带声音 | 99国产精品免费视频 | 台湾果冻传媒在线观看 | a亚洲在线观看不卡高清 | 日韩 亚洲 欧美 中文 高清 | 美美哒免费影视8 | 亚洲人成无码久久久AAA片 | 亚洲H成年动漫在线观看不卡 | 英国video性精品高清最新 | 99精品国产免费观看视频 | 无人影院在线播放 | 日本午夜看x费免 | 无码国产色欲XXXX视频 | 欧洲另类一二三四区 | 无人在线观看免费高清视频播放 | 偷拍国产精品在线播放 | 里番acg纲手的熟蜜姬训练场 |