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é)果了级解,下一篇文章補上……