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はアメリカの先生で英語ができないためこちらで質問させて頂いております。
delegate を強制ダウンキャストしているコードは、何かを参考にして書かれたのでしょうか。
それとも、何かの教材でしょうか。
コメントありがとうございます!
Udemyになります。
質問に追記しました。
先日から気になっていたのですが、Udemy のコードの質問が多く、またその内容が必ずしも正確でないことを懸念しています。ここで回答がついた後、Udemy のコードも修正されていた、ということもありました。
これは邪推ですが、Udemy で習得されている講座そのものの正確性はどうなのでしょうか。そのあたりはご自身で問い合わせていらっしゃるのでしょうか。あまりにも正確性に欠くコードが多いようであれば、それはお金を払うに値しない場合もあるので、きちんとUdemyに訴えるべきことかと思います。
ここで付く回答は、あくまでも講座全体のコードのごく一部から推測される内容をもとにつく回答で、それは必ずしも講師の意図と一致しない場合があります。
もしかしたら、講師が全体的内容を考えた上であえてそのように教えている可能性も否定できません。
ここで質問することがダメだ、というつもりはありませんが、Udemy の講座に対して、きちんと質問すべきなのではないでしょうか(それが英語であれ日本語であれ、まずは作者に聞くのが基本だと思います)。
ご指摘ありがとうございます。
回答を頂いた後、Udemy のコードも修正されていた件については失礼いたしました。
https://teratail.com/questions/320387
こちらの質問かと思いますが、チャプターを完了し理解した上で整理したいと思っております。
(今現在の質問はそのチャプターに関する疑問点です、コメント頂いているのに閉じられずにすみません)
ぼくは作りたいアプリがあり、それはインスタグラムのような画像シェアアプリです。
Udemyの講座では、まさにインスタグラムのクローンを作る講座だったので受講しました。
(https://www.udemy.com/course/instagram-firestore-app-clone-swift-5-ios-14-mvvm/)
実は、この先生の古いバージョンのインスタグラム講座(https://www.udemy.com/course/instagram-clone-w-swift-4-firebase-and-push-notifications/)を受けていてその際、先生に質問していましたが、自分の英語力のなさで理解できないまま講座を進めてしまうという失敗体験があったので今回の講座ではテラテイルを利用させて頂いております。
いや、英語力うんぬんを問うているわけではなく、「講座の中身そのものの信頼性」を聞いているのです。
日本語であれ英語であれ、文法エラーでコンパイルすら通らないテキストが講座に載っている時点で、その講座に問題があるとおもいませんか、と聞いているのです。
私も Udemy のアカウントは持っているので、リンク先の講座を見てみました。
受講の前提に
- Some programming experience and knowledge of Xcode is preferred
とありますが、章立てやイントロダクションを見る限り、Swift の文法書一冊を一通り読みこなした程度の知識は必要そうです。文法を理解しないでこの講座を受講するのは無理があると思います。
評価は悪くない講座ですが、高評価の多くは「最低限の言語知識は必要だ」と書いていいます。
最低評価でコメントを書いている人は一人ですが、コードは更新されないし、質問にも答えてくれない、というものもありました。
おそらく、この講座の受講者の多くは、仮にコードに間違いがあってもそれを自分で解決するだけの読解力がある人だと思っています。
もちろん、これらをどう解釈されて、どのように使われるかは質問者さんが判断することですが、テキストを見ることができない外部の回答者がどれだけ正確に答えられるかは疑問に思います。
回答1件
あなたの回答
tips
プレビュー