[摘要]本文是對swift開發新項目總結的講解,對學習IOS蘋果軟件開發有所幫助,與大家分享。
新項目用swift3.0開發,現在基本一個月,來總結一下遇到的問題及解決方案
1,在確定新項目用swift後,第一個考慮的問題是用純swift呢?還是用swift跟OC混編
考慮到新項目也不可避免的使用很多第三方庫,而第三方庫不一定支持swift或者有swift的替代版本,所以最終還是決定混編了;
(其實最終決定性因素就是YYModel不支持swift,而目前貌似沒有特別好用的swift的json解析庫,用慣了那麼好用的YYModel之後,再讓手寫model層真是受不了呀~~)
所以model層還是用OC;
json轉model是在網絡層做的,所以網絡層也就只能跟著用OC,剛好繼續用比較數據AFNetworking~
View層,跟ViewController就沒啥特殊的了,再不用swift就成純OC了。。。
2,如果要引入swift庫的話,cocoapods要加use_frameworks!命令
加了以後,所有的pod庫都會以framework的方式來生成,最直觀的變化就是:
在OC的代碼中不能直接#import <AFNetworking.h>了,必須得#import <AFNetworking/AFNetworking.h>,
而swift的代碼中,可以直接 import AFNetworking這個模塊;
3,因為2的關系造成了另外一個比較坑爹的問題,那就是swift的庫不受Xcode定義的宏命令的影響
比如某個庫裡面有定義
#if DEBUG
xxxx
#endif
在oc裡面,只需要在工程裡面定義 DEBUG就行了;
但是在swift中,定義DEBUG需要在 Build Settings -> Swift Compiler - Custom Flags 的Other Swift Flag中 加入 -DDEBUG ;
而這個debug的定義,對pod裡面的庫是不生效的。。。
搜來搜去,最終google到用pod install hook的方式來重新設置pod的flag,就是在Podfile中加入下面的代碼:
post_install do |installer|
installer.pods_project.targets.each do |target|
if target.name == 'OJASwiftKit'
target.build_configurations.each do |config|
if config.name == 'Debug'
config.build_settings['OTHER_SWIFT_FLAGS'] ||= ['$(inherited)','-DDEBUG']
end
end
end
end
end
其中“OJASwiftKit”是你需要設置的swift庫的名字,可以根據需要修改
可以參考老外的博客:http://marginalfutility.net/2015/10/11/swift-compiler-flags/
4,跟3類似的還有騰訊QQSDK不支持bitcode,但是在swift項目中概不了其設置的問題
我是用了自己寫的LXMThirdLoginManager來導入第三方登錄的sdk,所以第三方sdk的文件都是在pod中,貌似也是因為工程設置對pod不生效,所以QQSDK的bitcode選項關閉不了;
直接把sdk拖到項目裡面應該可以解決,但是這樣就還得配置很多依賴庫什麼,不如用pod方便;
根據3的啟發,想到是不是也可以用pod install hook 的方式來解決呢?
答案是可以的,再在3的代碼中加入一段代碼就可以了:
if target.name == 'LXMThirdLoginManager'
target.build_configurations.each do |config|
config.build_settings['ENABLE_BITCODE'] = false
end
end
這一段和上面的if target.name == 'OJASwiftKit’平級
5,swift代碼不能自動補全的問題
這個網上有很多解決方案了,貼一個對我的機器管用的
1
2
3
4
1) Close Xcode
2) Terminal -> rm -rf ~/Library/Developer/Xcode/DerivedData/*
3) Terminal -> rm -rf ~/Library/Caches/com.apple.dt.Xcode
4) Restart Xcode
6,swift代碼規范
因為之前沒有用swift開發過新項目,所以代碼規范也沒有現成的,本意是盡量跟蘋果官方規范保持一致,所以暫定用LinkedIn的swift規范
https://github.com/linkedin/swift-style-guide#1-code-formatting
中文翻譯:http://www.cocoachina.com/swift/20160725/17176.html
界面的開發中用swift和用OC感覺差異不是特別大,等遇到了再慢慢補充~