zoukankan      html  css  js  c++  java
  • 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库的名字,可以根据需要修改
     
    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感觉差异不是特别大,等遇到了再慢慢补充~
     
     
     
     
     
  • 相关阅读:
    m_Orchestrate learning system---三十一、模板和需求的关系
    你如何破解后安装PS cs6
    STL 源代码分析 算法 stl_algo.h -- pre_permutation
    霸气侧漏HTML5--之--canvas(1) api + 弹球例子
    hello nodejs
    整洁的正则表达式教程,这很容易理解
    基于Gsoap 的ONVIF C++ 库
    一个常见的错误时编写代码
    IT只忍者龟Photoshop简单人像的头发抠图过程
    彩色图像--色彩空间 HSI(HSL)、HSV(HSB)
  • 原文地址:https://www.cnblogs.com/Phelthas/p/6232036.html
Copyright © 2011-2022 走看看