Swift中常用的三方庫(Cartography胳赌、Alamofire、SwiftyJSON匙隔、Kingfisher)

最近在用Swift寫一個開源應(yīng)用疑苫,把一些在Swift中常用的庫列出來,方便學(xué)習(xí)Swift的同學(xué)使用纷责。

推薦一:代碼布局 Cartography

Cartography是類似于OC中Masonry代碼布局的庫捍掺,通過使用它,可以很方便快捷的進(jìn)行界面的布局再膳,使用也很簡單,類似于Masonry乡小。例如以下布局:

實例1

若實現(xiàn)以上布局只需要通過以下代碼即可完成布局

func CartographyTest(){

    let view1 = UIView.init();
    let view2 = UIView.init();
    
    self.view.addSubview(view1);
    self.view.addSubview(view2);
    
    constrain(view1,view2) { (view1,view2) in
        
        view1.top == (view1.superview?.top)!;
        view1.leading == (view1.superview?.leading)! + 54;
        view1.width == 100;
        view1.height == 100;
        
        view2.top == (view2.superview?.top)!;
        view2.trailing == (view2.superview?.trailing)! - 48;
        view2.width == 112;
        view2.height == 146;
    }
}

推薦二:網(wǎng)絡(luò)請求庫 Alamofire(Swift中的AF)

對于使用OC開發(fā)的同學(xué)一定都對AFNetworking很熟悉吧,在Swift中該作者也特意封裝了Swift版的AF饵史,它就是Alamofire,對網(wǎng)絡(luò)的請求也是極為方便的。使用方法也很簡單:

//MARK:網(wǎng)絡(luò)請求
func netRequest() {
  
    let parameter:Parameters = ["action":"mainList_NewVersion",
                                "currentPageIndex":"\(page)"];

    Alamofire.request(CommonURL + TopicHomePage, method: .post, parameters: parameter, encoding: URLEncoding.httpBody).responseJSON { (response) in
        
        print("Request: \(response.request)")
        print("Response: \(response.response)")
        print("Error: \(response.error)")
        
        
        if let value = response.result.value {
            
            let tempModel = TopicIndexModel.init(fromJson: JSON(value));
            
            //將數(shù)據(jù)模型放入對應(yīng)的model中
            if(self.page == 0){
            
                self.topicRootModel = tempModel;
                
            }else{
            
                self.topicRootModel?.result.append(contentsOf: tempModel.result);

            }
            
            self.tableView?.reloadData();
            self.tableView?.mj_footer.endRefreshing();
            self.tableView?.mj_header.endRefreshing();
            
            self.page += 1;
            
        }
        
    }
    
}

推薦三:模型轉(zhuǎn)換 SwiftyJSON

在Swift中,對于JSON的處理由于optional的引入胳喷,要手動從AnyObject(也就是Objective-C的id)取得數(shù)據(jù)湃番,顯得頗為麻煩,例如官方給出的例子:

let jsonObject : AnyObject! = NSJSONSerialization.JSONObjectWithData(dataFromTwitter, options: NSJSONReadingOptions.MutableContainers, error: nil);
            if let statusesArray = jsonObject as? NSArray{
                if let aStatus = statusesArray[0] as? NSDictionary{
                    if let user = aStatus["user"] as? NSDictionary{
                        if let userName = user["name"] as? NSDictionary{
                            //好累吭露,我就取個數(shù)據(jù)寫了這么多吠撮。
                        }
                    }
                }
            }

此時如果通過SwiftJSON使用來取數(shù)據(jù),如下:

let json = JSON(data: dataFromNetworking)
if let userName = json[0]["user"]["name"].string{
  //就這么簡單取到了讲竿。
}

其實這個不僅取數(shù)據(jù)變得簡單了泥兰,而且創(chuàng)建模型Model也變得異常的簡單。有點類似于MJExtention的使用题禀。

實例使用如下:

//
//  Category.swift
//
//  Create by lcc on 13/2/2017
//  Copyright ? 2017. All rights reserved.

import Foundation 
import SwiftyJSON


class Category : NSObject, NSCoding{

    var createDate : String!
    var enName : String!
    var id : String!
    var img : String!
    var name : String!
    var order : Int!


    init(fromJson json: JSON!){
        if json.isEmpty{
            return
        }
        createDate = json["createDate"].stringValue
        enName = json["enName"].stringValue
        id = json["id"].stringValue
        img = json["img"].stringValue
        name = json["name"].stringValue
        order = json["order"].intValue
    }


    func toDictionary() -> [String:Any]
    {
        var dictionary = [String:Any]()
        if createDate != nil{
            dictionary["createDate"] = createDate
        }
        if enName != nil{
            dictionary["enName"] = enName
        }
        if id != nil{
            dictionary["id"] = id
        }
        if img != nil{
            dictionary["img"] = img
        }
        if name != nil{
            dictionary["name"] = name
        }
        if order != nil{
            dictionary["order"] = order
        }
        return dictionary
    }


    @objc required init(coder aDecoder: NSCoder)
    {
         createDate = aDecoder.decodeObject(forKey: "createDate") as? String
         enName = aDecoder.decodeObject(forKey: "enName") as? String
         id = aDecoder.decodeObject(forKey: "id") as? String
         img = aDecoder.decodeObject(forKey: "img") as? String
         name = aDecoder.decodeObject(forKey: "name") as? String
         order = aDecoder.decodeObject(forKey: "order") as? Int

    }


    func encode(with aCoder: NSCoder)
    {
        if createDate != nil{
            aCoder.encode(createDate, forKey: "createDate")
        }
        if enName != nil{
            aCoder.encode(enName, forKey: "enName")
        }
        if id != nil{
            aCoder.encode(id, forKey: "id")
        }
        if img != nil{
            aCoder.encode(img, forKey: "img")
        }
        if name != nil{
            aCoder.encode(name, forKey: "name")
        }
        if order != nil{
            aCoder.encode(order, forKey: "order")
        }

    }

}

而創(chuàng)建Model的實例如下所示:

//從json中直接轉(zhuǎn)換對應(yīng)的Model
 let tempModel = Category.init(fromJson: JSON(value));

推薦四:圖片加載庫 Kingfisher(類似于SDWebImage)

對于App來說,圖片的加載以及相關(guān)的緩存是很重要的,而SDWebImage也正是為此而存在骑篙,在Swift中泣洞,有一個非常不錯的圖片加載的庫,就是Kingfisher了秀仲,該庫的使用與SDWebImage類似融痛,例如官方介紹:

let url = URL(string: "url_of_your_image")
imageView.kf.setImage(with: url)

推薦五:使用橋接模式將OC中的優(yōu)秀庫放入Swfit中開發(fā)

這里就直接列舉一個實例吧,以AFNetworking為例神僵,如果我們使用pod安裝對應(yīng)的OC中的類庫雁刷,先將OC與Swift的橋接模式打開,然后導(dǎo)入對應(yīng)的庫即可保礼,如下:

配置target
橋接模式

注:可能導(dǎo)入的時候總是提示沒有對應(yīng)的module沛励,此時可以通過clean項目來解決

總結(jié)

以上幾個庫都是Swift開發(fā)中常用的一些庫,可能還有一些沒有提及到的庫氓英,后續(xù)還會繼續(xù)添加侯勉,對于這些庫的安裝,推薦使用pod安裝,pod的內(nèi)容如下:

platform :ios, '8.0'
use_frameworks!

pod 'Cartography', '~> 1.0.1'
pod 'Kingfisher', '~> 3.4.0'

target 'your project name' do
    pod 'SwiftyJSON', '~> 3.1.4'
    pod 'Alamofire', '~> 4.3.0'
end

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末铝阐,一起剝皮案震驚了整個濱河市址貌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌徘键,老刑警劉巖练对,帶你破解...
    沈念sama閱讀 223,207評論 6 521
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異吹害,居然都是意外死亡螟凭,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,455評論 3 400
  • 文/潘曉璐 我一進(jìn)店門它呀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來螺男,“玉大人棒厘,你說我怎么就攤上這事∠滤恚” “怎么了奢人?”我有些...
    開封第一講書人閱讀 170,031評論 0 366
  • 文/不壞的土叔 我叫張陵,是天一觀的道長淆院。 經(jīng)常有香客問我何乎,道長,這世上最難降的妖魔是什么土辩? 我笑而不...
    開封第一講書人閱讀 60,334評論 1 300
  • 正文 為了忘掉前任支救,我火速辦了婚禮,結(jié)果婚禮上拷淘,老公的妹妹穿的比我還像新娘各墨。我一直安慰自己,他們只是感情好辕棚,可當(dāng)我...
    茶點故事閱讀 69,322評論 6 398
  • 文/花漫 我一把揭開白布欲主。 她就那樣靜靜地躺著,像睡著了一般逝嚎。 火紅的嫁衣襯著肌膚如雪扁瓢。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,895評論 1 314
  • 那天补君,我揣著相機(jī)與錄音引几,去河邊找鬼。 笑死挽铁,一個胖子當(dāng)著我的面吹牛伟桅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播叽掘,決...
    沈念sama閱讀 41,300評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼楣铁,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了更扁?” 一聲冷哼從身側(cè)響起盖腕,我...
    開封第一講書人閱讀 40,264評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎浓镜,沒想到半個月后溃列,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,784評論 1 321
  • 正文 獨居荒郊野嶺守林人離奇死亡膛薛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,870評論 3 343
  • 正文 我和宋清朗相戀三年听隐,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片哄啄。...
    茶點故事閱讀 40,989評論 1 354
  • 序言:一個原本活蹦亂跳的男人離奇死亡雅任,死狀恐怖风范,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情椿访,我是刑警寧澤乌企,帶...
    沈念sama閱讀 36,649評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站成玫,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏拳喻。R本人自食惡果不足惜哭当,卻給世界環(huán)境...
    茶點故事閱讀 42,331評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望冗澈。 院中可真熱鬧钦勘,春花似錦、人聲如沸亚亲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,814評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽捌归。三九已至肛响,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間惜索,已是汗流浹背特笋。 一陣腳步聲響...
    開封第一講書人閱讀 33,940評論 1 275
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留巾兆,地道東北人猎物。 一個月前我還...
    沈念sama閱讀 49,452評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像角塑,于是被迫代替她去往敵國和親蔫磨。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,995評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫圃伶、插件堤如、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,131評論 4 61
  • 歲月匆匆像一場夢,多少故事留在心中留攒,春去秋來煤惩,花開花落........轉(zhuǎn)眼單身兩年多了。2016年的圣誕節(jié)來...
    丑小鴨秀智閱讀 1,020評論 0 0
  • 不知道有多少人看了最近上映的動畫片《歡樂好聲音》炼邀。故事發(fā)生在一個全部由動物組成的世界里魄揉。以一個瀕臨倒閉的劇院為背景...
    琢愛舟閱讀 3,807評論 3 12
  • 今天開啟了語音輸入
    醉魔君閱讀 233評論 0 0
  • 不知道你有沒有發(fā)現(xiàn)洛退,絕大多數(shù)人不喜歡參加很多人的聚會瓣俯,比如酒席,生日宴兵怯,班級聚會等等彩匕。如果你是一個安靜的人,這種場...
    黑臉阿康閱讀 477評論 0 2