Udemyで勉強中です。
先生が書いた下記のコードについて質問が2個あります。
// FeedController.swift class FeedController: UICollectionViewController { @objc func handlelogout() { let controller = LoginController() -------質問したいコード---------- controller.delegate = self.tabBarController as! MainTabController ---------------------------- } }
前提:
・上記のコードは子のFeedController.swiftに設定され親はMainTabController。
・MainTabController
はUITabBarController
を継承。
※一番下に全体のコードが記載してあります。
質問① self.tabBarController
に関して
FeedControllerが継承しているUICollectionViewControllerの中のメソッドにtabBarControllerはないと思うのですが、なぜself.tabBarControlle
と指定できるのしょうか。
前提認識
下記のコードでself.addTarget
と設定できるのはUIButton
が継承しているUIControl
の中のメソッドにaddTarget
があるから。
class CustomUIButton: UIButton { init(title: String) { self.addTarget(self, action: #selector(a), for: .touchDown) } }
######質問② as! MainTabController
について
MainTabControllerにダウンキャストしている理由
以前の質問
以前、ダウンキャストに関する質問をしました。
今回に関しても同じような理由でダウンキャストしているのかもしれないのですが、どうしても理解することができず解説してほしいです。
以下、関係があると思われるコードです。
// FeedController.swift class FeedController: UICollectionViewController { // MARK: - Lifecycle override func viewDidLoad() { super.viewDidLoad() } @objc func handlelogout() { do { try Auth.auth().signOut() let controller = LoginController() controller.delegate = self.tabBarController as! MainTabController } catch { print("DEBUG: Failed to sing out") } } }
// LoginController.swift protocol AuthenticationDelegate:class { func authenticationDidComplete() }
// MainTabController.swift class MainTabController: UITabBarController{ // 省略 extension MainTabController: AuthenticationDelegate { func authenticationDidComplete() { print("ログインコントローラーでする処理をMainTabで処理") print("ユーザーの取得とアップデート") fetchUser() self.dismiss(animated: true, completion: nil) } } }
Udemyはアメリカの先生で英語ができないためこちらで質問させて頂いております。
回答1件
あなたの回答
tips
プレビュー