Swift3之面向協(xié)議開(kāi)發(fā)

用面向協(xié)議加載xib

  • 創(chuàng)建一個(gè)協(xié)議類(lèi)NibLoadable
import UIKit
protocol NibLoadable {

}
extension NibLoadable where Self : UIView {
    static func loadFromNib(_ nibname : String? = nil) -> Self {
        let loadName = nibname == nil ? "\(self)" : nibname!
        return Bundle.main.loadNibNamed(loadName, owner: nil, options: nil)?.first as! Self
    }
}
  • 假如HintCoverView從xib那邊加載那么只需要遵守NibLoadable協(xié)議
class HintCoverView: UIView,NibLoadable{
}
  • 調(diào)用時(shí)候:
lazy var hintCoverView : HintCoverView = {
        let hintCoverView = HintCoverView.loadFromNib()
        return hintCoverView
    }()

這就是面向協(xié)議開(kāi)發(fā)桶错,誰(shuí)需要這個(gè)功能就遵守這個(gè)協(xié)議敞斋,其開(kāi)發(fā)核心是: 模塊化(組件化)扁耐,比如寫(xiě)一個(gè)振動(dòng)的動(dòng)畫(huà)協(xié)議,如果當(dāng)UITextField文本驗(yàn)證錯(cuò)誤時(shí)候需要振動(dòng),那么就繼承這個(gè)協(xié)議寻馏,如果除了振動(dòng)還需要旋轉(zhuǎn)兆龙,那么可再寫(xiě)一個(gè)旋轉(zhuǎn)協(xié)議去繼承。這就是他功能強(qiáng)大之處耻台。

面向協(xié)議進(jìn)行網(wǎng)絡(luò)請(qǐng)求

import Foundation
protocol Requestable {
    var method : HttpMethod { get }
    var URLString : String { get }
   
    associatedtype ResultType : Decodable
}

extension Requestable {
    func request(completion : @escaping (ResultType?) -> Void) {
        // 1.創(chuàng)建URL
        let url = URL(string: URLString)!
        
        // 2.創(chuàng)建request對(duì)象
        let request = URLRequest(url: url)
        
        // 3.通過(guò)URLSession發(fā)送請(qǐng)求
        let task = URLSession.shared.dataTask(with: request, completionHandler: { (data, _, error) in
       // 通過(guò)Decodable協(xié)議得到data數(shù)據(jù)空免,手動(dòng)調(diào)用ResultType的parse:方法獲得解析后的數(shù)據(jù)
            completion(ResultType.parse(data!))
        })
        
        // 4.發(fā)起請(qǐng)求
        task.resume()
    }
}
// 解析數(shù)據(jù)協(xié)議
protocol Decodable {
    static func parse(_ data : Data) -> Self?
}
  • 假如有一個(gè)用戶信息請(qǐng)求:UserRequest,通過(guò)Requestable協(xié)議就會(huì)將里面參數(shù)傳進(jìn)去再去調(diào)用請(qǐng)求的方法
class UserRequest : Requestable {
    var method: HttpMethod = .GET
    var URLString : String = "http://www.baidu.com"
    typealias ResultType = User
}
  • 用戶模型解析
import UIKit
struct User {
    var name : String = "aaa"
    var message : String = "bbb"
    
    init?(data : Data) {
        guard let dictT = try? JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String : Any] else {
            return nil
        }
        
        let dict = dictT?["args"] as? [String : Any]
        
        guard let name = dict?["username"] as? String else {
            return nil
        }        
        guard let message = dict?["age"] as? String else {
            return nil
        }        
        self.name = name
        self.message = message
    }
}
// User(ResultType)的parse:方法進(jìn)行數(shù)據(jù)解析
extension User : Decodable {
    static func parse(_ data: Data) -> User? {
        return User(data: data)
    }
}
  • 調(diào)用:
import UIKit
class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        UserRequest().request { (user : User?) in
            if let user = user {
                print(user.name, user.message)
            }
        }
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末盆耽,一起剝皮案震驚了整個(gè)濱河市蹋砚,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌摄杂,老刑警劉巖都弹,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異匙姜,居然都是意外死亡畅厢,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門(mén)氮昧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)框杜,“玉大人浦楣,你說(shuō)我怎么就攤上這事∵淙瑁” “怎么了振劳?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)油狂。 經(jīng)常有香客問(wèn)我历恐,道長(zhǎng),這世上最難降的妖魔是什么专筷? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任弱贼,我火速辦了婚禮,結(jié)果婚禮上磷蛹,老公的妹妹穿的比我還像新娘吮旅。我一直安慰自己,他們只是感情好味咳,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布庇勃。 她就那樣靜靜地躺著,像睡著了一般槽驶。 火紅的嫁衣襯著肌膚如雪责嚷。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,730評(píng)論 1 289
  • 那天掂铐,我揣著相機(jī)與錄音再层,去河邊找鬼。 笑死堡纬,一個(gè)胖子當(dāng)著我的面吹牛聂受,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播烤镐,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼蛋济,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了炮叶?” 一聲冷哼從身側(cè)響起碗旅,我...
    開(kāi)封第一講書(shū)人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎镜悉,沒(méi)想到半個(gè)月后祟辟,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡侣肄,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年旧困,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吼具,死狀恐怖僚纷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拗盒,我是刑警寧澤怖竭,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站陡蝇,受9級(jí)特大地震影響痊臭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜登夫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一广匙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧悼嫉,春花似錦、人聲如沸拼窥。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)鲁纠。三九已至总棵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間改含,已是汗流浹背情龄。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留捍壤,地道東北人骤视。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像鹃觉,于是被迫代替她去往敵國(guó)和親专酗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

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

  • 《ijs》速成開(kāi)發(fā)手冊(cè)3.0 官方用戶交流:iApp開(kāi)發(fā)交流(1) 239547050iApp開(kāi)發(fā)交流(2) 10...
    葉染柒丶閱讀 5,086評(píng)論 0 7
  • *面試心聲:其實(shí)這些題本人都沒(méi)怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來(lái)就是把...
    Dove_iOS閱讀 27,128評(píng)論 29 470
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理盗扇,服務(wù)發(fā)現(xiàn)祷肯,斷路器,智...
    卡卡羅2017閱讀 134,626評(píng)論 18 139
  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉疗隶,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 1,686評(píng)論 0 9
  • 既然世上最幸福的就是:你等的那個(gè)人也在等你佑笋、 你關(guān)心的那個(gè)人也在關(guān)心你、 你想的那個(gè)人也在想你斑鼻、 你愛(ài)的那個(gè)人也在...
    愛(ài)之涯閱讀 355評(píng)論 0 1