Ваше расширение бесполезно, так как он просто так же, как вызов API()
каждый раз:
self.APIHelper().callMethod()
self.APIHelper().callSecondMethod() //here you created another API instance
же как
API().callMethod()
API().callSecondMethod()
Если API
является singletone, идея выглядит нормально, но в стрижа вы обычно создают синглетный со статической константой:
class API {
static let sharedAPI = API()
//...
}
и доступ к ней, как это:
API.sharedAPI.callMethod()
API.sharedAPI.callSecondMethod() //now called in same API instance
Если вы не хотите писать API.sharedAPI
каждый раз, то вы можете использовать:
Ваше расширение
extension UIViewController {
var apiHelper: API {return API.sharedAPI}
}
Не рекомендуется, как объяснил @NickCatib.
вид Базовый контроллер
, как @NickCatib предложил (проще с переменной):
class BaseViewController: UIViewController {
// some of the code you might need
let apiHelper = API.sharedAPI
}
Протокол
Если вы используете API времени просматривать контроллерах времени, может быть лучше заявить протокол
protocol APIHelper {
var apiHelper: API {get}
}
с реализацией по умолчанию
extension APIHelper {
var apiHelper: API {return API.sharedAPI}
}
и подключить его к ViewController только при необходимости
class ViewControllerThatNeedsAPI: UIViewController, APIHelper {
// apiHelper avalible here
}
Со всеми тремя способами, вы получаете доступ к API, как это:
apiHelper.callMethod()
Как насчет какой-то контроллера базового представления, где вы можете расширить эту декларацию? Таким образом, у всех контроллеров вашего вида есть такая функция, даже если она вам не нужна. – Miknash
как класс APIViewController: UIViewController {let APIHelper = API()} – JuicyFruit
да, что-то в этом роде. и когда вам это нужно, вы просто наследуете этот контроллер. – Miknash