新項目用swift3.0開發,現在基本一個月,來總結一下遇到的問題及解決方案 1,在確定新項目用swift後,第一個考慮的問題是用純swift呢?還是用swift跟OC混編 考慮到新項目也不可避免的使用很多第三方庫,而第三方庫不一定支持swift或者有swift的替代版本,所以最終還是決定混編了; ...
新項目用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 |
中文翻譯:http://www.cocoachina.com/swift/20160725/17176.html 界面的開發中用swift和用OC感覺差異不是特別大,等遇到了再慢慢補充~