使用Swift的代理腹纳,閉包來封裝一個公用協(xié)議減少垃圾代碼

iOS開發(fā)中,如果不進(jìn)行適當(dāng)?shù)姆庋b诗越,使用協(xié)議或者繼承類來進(jìn)行開發(fā)派哲,你就會遇到傳說中的ViewController(以后簡稱VC) Hell的問題……

比如說,我們先聲網(wǎng)App中為了調(diào)用接口掺喻,做簡單的判斷,會有如下的垃圾代碼(前輩遺留下來的):

override func viewDidLoad() {
    super.viewDidLoad()
    
    var color = UIColor(red: 153/255, green: 204/255, blue: 204/255, alpha: 1)
    self.navigationController?.navigationBar.barTintColor = color
    
    self.httpController.delegate = self
    
    Config.shareInstance().isNetworkRunning = CheckNetwork.doesExistenceNetwork()
    
    if Config.UUID == nil || Config.UUID!.isEmpty
    {
        Tool.showErrorHUD("去信息門戶登錄一下吧:)")
    }
    else if !Config.shareInstance().isNetworkRunning
    {
        Tool.showErrorHUD("貌似你沒有聯(lián)網(wǎng)哦")
    }
    else
    {
        Tool.showProgressHUD("正在更新校園網(wǎng)信息")
        sendNicAPI()
    }
    // Do any additional setup after loading the view.
}

func sendNicAPI(){
    let nicURL = "http://herald.seu.edu.cn/api/nic"
    let parameter:NSDictionary = ["uuid":Config.UUID!]
    
    self.httpController.postToURLAF(nicURL, parameter: parameter, tag: "nic")
}

func didReceiveDicResults(results: NSDictionary, tag: String) {
    if let content:NSDictionary = results["content"] as? NSDictionary{
        if tag == "nic"{
            firstSend = false
            Tool.showSuccessHUD("獲取信息成功")
            println(content.allKeys)
        }
    }
}

看到了嗎储矩,每個VC開頭都得這樣寫一發(fā)感耙,如果我們有20多個功能呢?會變成什么樣子持隧?

坑爹的功能列表

所以即硼,這樣下去是絕對不行的,必須對整個亂七八糟的初始化屡拨,發(fā)送請求只酥,請求接受進(jìn)行封裝褥实,這里就會用到Swift最有用的協(xié)議,代理裂允,以及閉包了损离。

這個首先通過協(xié)議和代理,閉包放在下一篇绝编。

協(xié)議僻澎,顧名思義,也就是其他語言里面的接口(C++的抽象類也差不多)
由于Swift不支持普通類型(Int之流)設(shè)置為Static十饥,類方法如果是靜態(tài)窟勃,必須加class關(guān)鍵字(我覺得這個很有槽點),只有Struct和Enum可以直接用Static(也有小Tip可以用Struct包裹一個普通類型逗堵,設(shè)為計算類型秉氧,然后充當(dāng)一個Static成員,但是這里不講了)

我們首先可以這樣封裝簡單的初始化方法……

class func initNavigationAPI(VC:UIViewController,navBarColor:UIColor) -> HttpController?{
    var httpController:HttpController = HttpController()
    VC.navigationController?.navigationBar.barTintColor = navBarColor
    
    Config.shareInstance().isNetworkRunning = CheckNetwork.doesExistenceNetwork()
    
    if Config.UUID == nil || Config.UUID!.isEmpty{
        Tool.showSuccessHUD("請在邊欄的個人資料中補全您的信息")
    }
    else if !Config.shareInstance().isNetworkRunning{
        Tool.showErrorHUD("貌似你沒有聯(lián)網(wǎng)哦")
    }
    else{
        Tool.showProgressHUD("正在獲取信息")
        return httpController
    }
    return nil
}

OK蜒秤?那個HttpController是另一個接口汁咏,來進(jìn)行網(wǎng)絡(luò)操作的,代理需要靠它垦藏,所以我們返回一個HttpController實例梆暖,如果失敗就返回nil,在實際VC里面加一個解包判斷即可掂骏。

以后轰驳,想要初始化,就只需要這樣了

override func viewDidLoad() {
    super.viewDidLoad()
    var color = UIColor(red: 153/255, green: 204/255, blue: 204/255, alpha: 1)
    self.httpController = Tool.initNavigationAPI(self,navBarColor: color) ?? nil
    
    if (self.httpController != nil){
        self.httpController!.delegate = self
        Tool.sendAPI("cardDetail", httpController: self.httpController!)
    }
}

把一群亂七八糟的代碼扔走弟灼。下一步就是如果用代理來代理我們所有的請求以及相應(yīng)的結(jié)果了级解,下一篇文章補上……

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市田绑,隨后出現(xiàn)的幾起案子勤哗,更是在濱河造成了極大的恐慌,老刑警劉巖掩驱,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件芒划,死亡現(xiàn)場離奇詭異,居然都是意外死亡欧穴,警方通過查閱死者的電腦和手機(jī)民逼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來涮帘,“玉大人拼苍,你說我怎么就攤上這事〉饔В” “怎么了疮鲫?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵吆你,是天一觀的道長。 經(jīng)常有香客問我俊犯,道長妇多,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任瘫析,我火速辦了婚禮砌梆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘贬循。我一直安慰自己咸包,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布杖虾。 她就那樣靜靜地躺著烂瘫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪奇适。 梳的紋絲不亂的頭發(fā)上坟比,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天,我揣著相機(jī)與錄音嚷往,去河邊找鬼葛账。 笑死,一個胖子當(dāng)著我的面吹牛皮仁,可吹牛的內(nèi)容都是我干的籍琳。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼贷祈,長吁一口氣:“原來是場噩夢啊……” “哼趋急!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起势誊,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤呜达,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后粟耻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體查近,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年挤忙,在試婚紗的時候發(fā)現(xiàn)自己被綠了嗦嗡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡饭玲,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出叁执,到底是詐尸還是另有隱情茄厘,我是刑警寧澤矮冬,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站次哈,受9級特大地震影響胎署,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜窑滞,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一琼牧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧哀卫,春花似錦巨坊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至共啃,卻和暖如春占调,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背移剪。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工究珊, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人纵苛。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓剿涮,卻偏偏與公主長得像,于是被迫代替她去往敵國和親赶站。 傳聞我的和親對象是個殘疾皇子幔虏,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,440評論 2 348

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