Вы говорите:
let handlerBlock: (String) -> Void = { redirect in
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let loginScreen = storyboard.instantiateViewController(withIdentifier: redirect)
self.present(loginScreen, animated: true, completion: nil)
}
Проблема в том, что вы используете термин self
в контексте, где нет self
.(Ну, есть self
, но это не то, что вы думаете.) present
- это метод экземпляра UIViewController, поэтому self
должен быть экземпляром UIViewController;и в этом контексте это не так.
Я могу придумать полдюжины способов выразить то, что вы пытаетесь выразить, но самым простым, вероятно, было бы переписать это как:
func handlerBlock(_ redirect:String) -> Void {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let loginScreen = storyboard.instantiateViewController(withIdentifier: redirect)
self.present(loginScreen, animated: true, completion: nil)
}
Теперь handlerBlock
- это метод экземпляра , а self
имеет смысл - это именно тот экземпляр, который является именно тем, что вы хотите.Остальная часть вашего кода остается неизменной, поскольку голое имя handlerBlock
в выражении requestToken(success: handlerBlock)
, как и прежде, является именем функции.