iOS開發(fā)中,如果不進行適當?shù)姆庋b,使用協(xié)議或者繼承類來進行開發(fā),你就會遇到傳說中的ViewController(以后簡稱VC) Hell的問題……
比如說,我們先聲網App中為了調用接口,做簡單的判斷,會有如下的垃圾代碼(前輩遺留下來的):
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)網哦")
}
else
{
Tool.showProgressHUD("正在更新校園網信息")
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ā)送請求,請求接受進行封裝,這里就會用到Swift最有用的協(xié)議,代理,以及閉包了。
這個首先通過協(xié)議和代理,閉包放在下一篇。
協(xié)議,顧名思義,也就是其他語言里面的接口(C++的抽象類也差不多)
由于Swift不支持普通類型(Int之流)設置為Static,類方法如果是靜態(tài),必須加class關鍵字(我覺得這個很有槽點),只有Struct和Enum可以直接用Static(也有小Tip可以用Struct包裹一個普通類型,設為計算類型,然后充當一個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)網哦")
}
else{
Tool.showProgressHUD("正在獲取信息")
return httpController
}
return nil
}
OK?那個HttpController是另一個接口,來進行網絡操作的,代理需要靠它,所以我們返回一個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!)
}
}
把一群亂七八糟的代碼扔走。下一步就是如果用代理來代理我們所有的請求以及相應的結果了,下一篇文章補上……