Swift可行性分析

swift優(yōu)勢:

兼容性:
  • 對oc無縫兼容:
    通過建立橋接文件實現(xiàn)使用swift語法調(diào)用原oc代碼
    例如:新建zaozuo-ios-Bridging-Header.h文件,導(dǎo)入oc需要暴露給swift的類
//FMDB
#import "FMDB.h"

// shareSdk
#import <ShareSDK/ShareSDK.h>
#import <ShareSDKUI/ShareSDK+SSUI.h>
#import <ShareSDKConnector/ShareSDKConnector.h>
//騰訊SDK頭文件
#import <TencentOpenAPI/TencentOAuth.h>
#import <TencentOpenAPI/QQApiInterface.h>
//微信SDK頭文件
#import "WXApi.h"
//新浪微博SDK頭文件
#import "WeiboSDK.h"
  • Foundation、UiKit等系統(tǒng)框架保持oc調(diào)用方式
新特性:
  • 新增泛型;
  • 支持閉包(類似block),可用于回調(diào);
  • 新增元組;
  • 數(shù)據(jù)類型更加簡潔,常用基本數(shù)據(jù)類型:String、Int、Double、Array<T>、Dictionary<K, V>、Set<T> ,Array、Dictionary都具有可變性 ;
  • 函數(shù)支持嵌套、多返回值(借助元組),函數(shù)作為參數(shù)傳遞;
  • 新增Optionals,借助Optionals nil檢查減少空指針異常;
  • 新增as語法,可用于類型轉(zhuǎn)換, 例如:String as NSString;
  • 無所不能的switch。

swift劣勢:

兼容性問題
  • swift調(diào)用原有oc導(dǎo)致的類型轉(zhuǎn)換問題:
    例如:原oc中NSArray會被轉(zhuǎn)換為Array<AnyObject>,如果原oc NSArray中存放的對象非繼承自AnyObject(例如:枚舉類型)帶來的轉(zhuǎn)換問題(枚舉類型可調(diào)用rawValue傳入原始值);
  • 枚舉等一些特殊類型調(diào)用方式略變。
CocoaPods支持問題:
  • Embedded frameworks require a minimum deployment target of iOS 8
    deployment target:7.0+無法使用CocoaPods引入swift開源庫;
  • 7.0+ CocoaPods替代方案:
    采用swift library 可采用git subModule管理(當(dāng)項目target:8.0+只需移除subModule,加入到CocoaPods),oc library 可保持CocoaPods依賴方式;
nil 處理方式改變,可能引入的新問題:
  • swift采用Optionals處理變量值為nil的情況,正常情況下增強了調(diào)用的安全性,對于Optionals類型如果采用!強制取值可能引發(fā)無法避免的空指針;
    例如:
public static func dictionaryToEntityList<T:BaseModel>(set:FMResultSet)
        -> Array<T>{
        var arr:Array<T> = []
        while set.next(){
            var entity:AnyObject = T.classForCoder().alloc()
            if entity is T{
                dictionaryToEntity(set.resultDictionary(), object: entity as! T)
                arr.append(entity as! T)
            }
        }
        return arr
    }

上面函數(shù),傳入的參數(shù)set是非Optionals,當(dāng)采用以下方式調(diào)用時,可能引發(fā)空指針異常,而在dictionaryToEntityList函數(shù)中卻無法避免此問題

var set:FMResultSet? = nil
dictionaryToEntityList(set!)
  • 解決方案:
    將set更改為Optionals或在dictionaryToEntityList函數(shù)中傳入set前做非nil校驗。

UI方案:

采用storyborad:

  • 多人協(xié)作不可同時修改storyboard中同一個ViewController
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容