最近項目從 Xcode 7 + Swift 2.3 升級 Xcode 8 + Swift 3.0,遇到了一些問題,整理一下
自己的工程從2.3 升級到3.0算是順利嘹屯,只要使用 Xcode 的 Converter 即可
菜單在Edit -> Convert -> To Current Swift Syntax...
項目中難免會使用到第三方的 lib眉枕,如果第三方 lib 沒有提供 Swift 3 版本,那就得另想辦法疏之。什么叫另想辦法殿雪?換個 lib 唄,不然就自己造輪子
下面說一下第三方 lib 的遷移(我的項目使用 Cocoapods 管理第三方 lib锋爪,所以都以 Cocoapods 為例丙曙,其它管理工具都差不多爸业,自行處理)
遷移大法
- 首先在 Podfile的最下面添加如下代碼,為所有 lib 指定 Swift 版本
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['SWIFT_VERSION'] = '3.0'
end
end
end
- 將第三方 lib 切換到 Swift 3 版本亏镰。一般有在維護(hù)的 lib 都會提供 Swift 3的分支扯旷,即使沒有提供,也會有熱心的碼農(nóng)們 fork 適配索抓。下面講幾個我項目里用的 lib 的遷移
-
Alamofire 最新版本4.0钧忽,這個版本最低適配要求是 Swift 3.0,iOS 9.0逼肯。
由于我的項目還需要對部分 iOS 8 用戶負(fù)責(zé)耸黑,所以只能遺憾和 Alamofire 告別了。昨天猶豫了半天篮幢,到底要自己造輪子大刊,還是再找個靠譜的 lib。最終還是決定偷懶換 lib三椿,雖然功能還不夠完善缺菌,但基本夠使。
代替品是SwiftHTTP搜锰,但這個 lib 暫時沒有提供 Swift 3 版本男翰,剛才說了有熱心的碼農(nóng)已經(jīng) fork 適配好,所以將 Podfile 中的代碼 link 修改一下
pod 'SwiftHTTP', :git => 'https://github.com/matheusfrozzi/SwiftHTTP'
-
SwiftyJSON 也是沒有提供 Swift 3 版本纽乱,所以使用熱心碼農(nóng)的
pod 'SwiftyJSON', :git => 'https://github.com/appsailor/SwiftyJSON.git', :branch => 'swift3'
-
CocoaLumberjack
pod 'CocoaLumberjack/Swift', :git => 'https://github.com/avielg/CocoaLumberjack'
- 其它的不再列舉啦
總結(jié)
Migrate to Swift 3.0 雖然麻煩蛾绎,但是 Swift 3.0 版本的命名風(fēng)格真的是很棒,寫代碼像在寫小說一樣
截取幾個例子鸦列,大家細(xì)細(xì)品味租冠,具體規(guī)范請看 Swift API Design Guidelines