新项目用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. 【知识必备】内存泄漏全解析,从此拒绝ANR,让OOM远离你的身边,跟内存泄漏say byebye

    一.写在前面 对于C++来说,内存泄漏就是new出来的对象没有delete,俗称野指针:而对于java来说,就是new出来的Object放在Heap上无法被GC回收:而这里就把我之前的一篇内存泄漏的总 ...

  2. 你知道C#中的Lambda表达式的演化过程吗?

    那得从很久很久以前说起了,记得那个时候... 懵懂的记得从前有个叫委托的东西是那么的高深难懂. 委托的使用 例一: 什么是委托? 个人理解:用来传递方法的类型.(用来传递数字的类型有int.float ...

  3. python之路 - 基础1

    1.安装windows安装双版本Python2,Python3 下载Python2和Python3https://www.python.org/downloads/ 分别安装两个版本 进入Python ...

  4. HTML5 sessionStorage会话存储

    sessionStorage 是HTML5新增的一个会话存储对象,用于临时保存同一窗口(或标签页)的数据,在关闭窗口或标签页之后将会删除这些数据.本篇主要介绍 sessionStorage(会话存储) ...

  5. Python标准模块--ContextManager

    1 模块简介 在数年前,Python 2.5 加入了一个非常特殊的关键字,就是with.with语句允许开发者创建上下文管理器.什么是上下文管理器?上下文管理器就是允许你可以自动地开始和结束一些事情. ...

  6. HTML块级元素

    前面的话   在HTML5出现之前,人们一般把元素分为块级.内联和内联块元素.本文将详细介绍HTML块级元素 h   标题(Heading)元素有六个不同的级别,<h1>是最高级的,而&l ...

  7. 学习ASP.NET Core, 怎能不了解请求处理管道[3]: 自定义一个服务器感受一下管道是如何监听、接收和响应请求的

    我们在<服务器在管道中的"龙头"地位>中对ASP.NET Core默认提供的具有跨平台能力的KestrelServer进行了介绍,为了让读者朋友们对管道中的服务器具有更 ...

  8. SDWebImage源码解读之SDWebImageCache(上)

    第五篇 前言 本篇主要讲解图片缓存类的知识,虽然只涉及了图片方面的缓存的设计,但思想同样适用于别的方面的设计.在架构上来说,缓存算是存储设计的一部分.我们把各种不同的存储内容按照功能进行切割后,图片缓 ...

  9. javascript之闭包理解以及应用场景

    半个月没写博文了,最近一直在弄小程序,感觉也没啥好写的. 之前读了js权威指南,也写了篇博文,但是实话实说当初看闭包确实还是一头雾水.现在时隔一个多月(当然这一段时间还是一直有在看闭包的相关知识)理解 ...

  10. mongodb

    修改所有的记录: > db.t_express_apply.update({},{$set:{"isStatus" : 0}},{multi:true})WriteResul ...