查看: 301|回复: 0

[IOS开发教程] swift开发新项目总结

发表于 2017-1-9 12:00:01

新项目用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 了,必须得#import , 而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感觉差异不是特别大,等遇到了再慢慢补充~


回复

使用道具 举报