我正在Swift中爲iOS創建一個應用程序,並且試圖將我的API調用邏輯保留在我的ViewControllers之外。我跟着this tutorial進行了一個API調用,我將在下面介紹。使用協議實現多個API調用(服務器請求)
我正在創建ViewController將實現的協議「APIControllerProtocol」,然後創建一個APIController類,該類將包含名爲'delegate'的屬性以保存APIControllerProtocol類型的實例。該協議被簡單地定義爲
protocol APIControllerProtocol {
func didReceiveAPIResults(result: SwiftyJSON.JSON)
}
而且視圖控制器將實行didReceiveAPIResults函數的調用API調用返回JSON數據之後。 ViewController將包含一個APIController的實例,並調用一個函數調用API。
在這一點上,我想讓更多的ViewControllers執行API調用,如果我只需要爲每個ViewController調用1個API,那麼我可以將另一個函數添加到APIController中,並且我可以讓新的ViewController使用相同的協議。但是,如果有,將需要作出2所或多個API調用的ViewController這個邏輯是有缺陷的,因爲
- 我不能在兩種不同的方式調用didReceiveAPIResults在ViewController中,
我不認爲添加多個'委託'屬性到APIController類來保存不同類型的協議是一條路。
在協議中定義多個函數意味着我將不得不在ViewControllers中實現所有這些函數,只需要進行1次API調用即可。
我的思路來解決這個問題是
做一個APIController類APIControllerProtocol在APIControllerProtocol每個視圖控制器
使用可選功能,因此不是每個視圖控制器就必須實現所有的功能(我不知道這會如何工作)
任何其他見解,將不勝感激。
是的,此處的API調用表示服務器請求。閉包設計對協議設計有什麼好處?我不明白維護一個請求列表的重要性是什麼?您能否提供代碼或指向教程的鏈接以向我展示如何使用服務器請求的關閉? – hoffware
這聽起來像你想擁有一個管理多個服務器請求的類。代表是一對一的關係。每個服務器管理器對象只能有一個且只有一個委託。您不能以這種方式管理來自3個不同視圖控制器的未決請求。有了完成塊,你可以。 –
您可能想要看看像AFNetworking這樣的圖書館,而不是重新發明輪子。特別是那個非常豐富和成熟,有很多很棒的功能,並且有成千上萬的開發者在使用它。它能做到我們談論得非常好。 –