新项目用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库的名字,可以根据需要修改
 
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规范
 
 
界面的开发中用swift和用OC感觉差异不是特别大,等遇到了再慢慢补充~
 
 
 
 
 

swift开发新项目总结的更多相关文章

  1. Swift开发iOS项目实战视频教程(一)---iOS真简单

    本课主要介绍iOS项目的创建.第一个iOS项目的开发.UILabel.UIButton的使用. 假设你看完此视频还认为iOS非常难,请你来找我! 本教程摒弃枯燥的语法和知识解说,全是有趣有料的项目实战 ...

  2. Swift开发iOS项目实战视频教程(二)---图片与动画

    本课主要介绍UIImageview.NSTimer的使用.并介绍了一种动画实现方式. 本教程摒弃枯燥的语法和知识解说.全是有趣有料的项目实战! 视频优酷链接:v.youku.com/v_show/id ...

  3. 使用Swift开发iOS项目、UI创建、方法调用

    //1.root控制器的创建        var rootCtrl =RootViewController()        var root:UINavigationController =UIN ...

  4. 循序渐进开发WinForm项目(1) --数据库设计和项目框架的生成

    随笔背景:在很多时候,很多入门不久的朋友都会问我:我是从其他语言转到C#开发的,有没有一些基础性的资料给我们学习学习呢,你的框架感觉一下太大了,希望有个循序渐进的教程或者视频来学习就好了. 其实也许我 ...

  5. 用Kotlin开发Android应用(II):创建新项目

    这是关于Kotlin的第二篇.各位高手发现问题,请继续“拍砖”. 原文标题:Kotlin for Android(II): Create a new project 原文链接:http://anton ...

  6. Entity Framwork(EF) 7——在现在数据库的甚而上开发MVC 新项目

    一.开发背景: 由于老系统已经无法满足实际业务需求,需在现有数据库的甚而上开发新的项目. 二.困难点: 而EF默认情况下是要删除现有数据库表格后重新创建,这是不允许的.当你创建数据库对象时系统会提示“ ...

  7. Android Studio开发第二篇创建新项目

    创建新项目很简单,File-New-New Project,这个没什么好说的跟Eclipse都差不都. 第二步SDK选择,有手机平板还有Wear,TV,汽车Auto,谷歌眼镜等几个种平台,这里就先选择 ...

  8. Android新项目GBSS:第1篇 搭建开发环境

    最近接手一个Android新项目,之前也没做过这方面的开发,算是边学边干,这两天看了一下Android开发的书,大致入门了一点,今天把所需要的软件都下了下来,准备开工,先列一下开发环境: 所有的软件都 ...

  9. 项目开发中Maven的单向依赖-2022新项目

    一.业务场景 工作多年,在真实的项目开发中经常会遇到将一个项目拆分成多个工程的情况,比如将一个真实的项目拆分成controller层,service层, dao层,common公共服务层等等.这样拆分 ...

随机推荐

  1. Yii1.1的验证规则

    在Yii1.1的数据验证是由CValidator完成,在CValidator中提供了各种基本的验证规则 <?php public static $builtInValidators=array( ...

  2. lua执行字节码的过程介绍

    前面一篇文章中介绍了lua给下面代码生成最终的字节码的整个过程,这次我们来看看lua vm执行这些字节码的过程. foo = "bar" local a, b = "a& ...

  3. [.NET] 利用 async & await 的异步编程

    利用 async & await 的异步编程 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/5922573.html  目录 异步编程的简介 异 ...

  4. 用C语言封装OC对象(耐心阅读,非常重要)

    用C语言封装OC对象(耐心阅读,非常重要) 本文的主要内容来自这里 前言 做iOS开发的朋友,对OC肯定非常了解,那么大家有没有想过OC中NSInteger,NSObject,NSString这些对象 ...

  5. canvas与html5实现视频截图功能

    这段时间一直在研究canvas,突发奇想想做一个可以截屏视频的功能,然后把图片拉去做表情包,哈哈哈哈哈哈~~ 制作方法: 1.在页面中加载视频 在使用canvas制作这个截图功能时,首先必须保证页面上 ...

  6. BlockingCollection使用

    BlockingCollection是一个线程安全的生产者-消费者集合. 代码 public class BlockingTest { BlockingCollection<int> bc ...

  7. “此网页上的某个 Web 部件或 Web 表单控件无法显示或导入。找不到该类型,或该类型未注册为安全类型。”

    自从vs装了Resharper,看见提示总是手贱的想去改掉它.于是乎手一抖,把一个 可视web部件的命名空间给改了. 喏,从LibrarySharePoint.WebPart.LibraryAddEd ...

  8. Microsoft Visual Studio 2015 下载、注册、安装过程、功能列表、问题解决

    PS:请看看回复.可能会有文章里没有提到的问题.也许会对你有帮助哦~ 先上一张最终的截图吧: VS2015正式版出了,虽然没有Ultimate旗舰版,不过也是好激动的说.哈哈.可能有的小伙伴,由于工作 ...

  9. centos6和centos7防火墙的关闭

    CentOS6.5查看防火墙的状态: [zh@localhost ~]$service iptable status 显示结果: [zh@localhost ~]$service iptable st ...

  10. 我的MYSQL学习心得(十三) 权限管理

    我的MYSQL学习心得(十三) 权限管理 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) ...