前提・実現したいこと
どんな処理をしているのか分からないコードがあったので理解したい
Swiftの英語の動画教材で、Firebaseを使用したログインの学習をしていたのですが、
どのような処理をしているのか、分からないコードがあったので、質問させていただきました
こちらのコードが理解できません
guard let strongSelf = self else {
return
}
どのような処理をしているか、ご教示いただけましたら幸いです
よろしくお願いします
該当のソースコード
import UIKit import FirebaseAuth class ViewController: UIViewController { //---ログインラベル private let label: UILabel = { let label = UILabel() label.textAlignment = .center label.text = "Log in" label.font = .systemFont(ofSize: 24, weight: .semibold) return label }() //---アドレス入力ラベル private let emailField: UITextField = { let emailField = UITextField() emailField.placeholder = "Email Address" emailField.layer.borderWidth = 1 emailField.layer.borderColor = UIColor.black.cgColor emailField.backgroundColor = .white return emailField }() //---パスワード入力ラベル private let passwordField: UITextField = { let passField = UITextField() passField.placeholder = "Password" passField.layer.borderWidth = 1 passField.isSecureTextEntry = true passField.layer.borderColor = UIColor.black.cgColor passField.backgroundColor = .white return passField }() //---送信ボタン private let button: UIButton = { let button = UIButton() button.backgroundColor = .systemGreen button.setTitleColor(.white, for: .normal) button.setTitle("Continue", for: .normal) return button }() //---ViewDidLoad override func viewDidLoad() { super.viewDidLoad() //作成したラベルを画面に追加 view.addSubview(label) view.addSubview(emailField) view.addSubview(passwordField) view.addSubview(button) view.backgroundColor = .systemPurple //addTarget : イベント(ボタンタップ時)に呼び出すアクションを指定 button.addTarget(self, action: #selector(didTapButton), for: .touchUpInside) } //---レイアウトの構築を行う //作成したラベルのレイアウト(作成位置を指定) override func viewDidLayoutSubviews() { //ログインラベル //x, y はラベルの表示位置 //width, height はラベル本体のサイズ label.frame = CGRect(x: 0, y: 100, width: view.frame.size.width, height: 80) //メール emailField.frame = CGRect(x: 20, y: label.frame.origin.y + label.frame.size.height + 10, width: view.frame.size.width - 40, height: 50) //パスワード passwordField.frame = CGRect(x: 20, y: emailField.frame.origin.y + emailField.frame.size.height + 10, width: view.frame.size.width - 40, height: 50) //ボタン button.frame = CGRect(x: 20, y: passwordField.frame.origin.y + passwordField.frame.size.height + 30, width: view.frame.size.width - 40, height: 52) } //完全に遷移が行われ、スクリーン上に表示された時に呼ばれる //ここでViewの生成などは行わない override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) //viewが生成されてから、キーボードを開く emailField.becomeFirstResponder() } //---ボタンタップ時に呼び出す @objc private func didTapButton() { print("Continue Button Tapped") //メールとパスが未入力でないかチェック guard let email = emailField.text, !email.isEmpty, let password = passwordField.text, !password.isEmpty else { print("Missing field data") return } //Firebaseで行うこと // 認証用のインスタンスを作成 // ログインを試みる // 失敗時、alertを表示する // 成功時、アカウントを作成する //アプリの起動時にサインインを確認する //サインアウトするボタンの作成 // 認証用のインスタンスを作成 FirebaseAuth.Auth.auth().signIn(withEmail: email, pass: password, completion: { [weak self] (result, error) in "こちらのコードの機能が理解できません" guard let strongSelf = self else { return } //アカウントの作成を表示 guard error == nil else { strongSelf.showCreateAccount(email: email, password: password) return } // print("You have signed in") strongSelf.label.isHidden = true strongSelf.emailField.isHidden = true strongSelf.passwordField.isHidden = true strongSelf.button.isHidden = true }) } //アラートを飛ばす func showCreateAccount(email: String, password: String) { let alert = UIAlertController(title: "Create Account", message: "Would you like to create an account", preferredStyle: .alert) alert.addAction(UIAlertAction(title: "Continue", style: .default, handler: {_ in FirebaseAuth.Auth.auth().createUser(withEmail: email, password: password) { [weak self](result, error) in // guard let strongSelf = self else { return } // print("Account creation failed") guard error == nil else { return } // print("You have signed in") strongSelf.label.isHidden = true strongSelf.emailField.isHidden = true strongSelf.passwordField.isHidden = true strongSelf.button.isHidden = true } })) alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: {_ in })) present(alert, animated: true) } }//
補足情報(FW/ツールのバージョンなど)
iOS: 13.5
Xcode : 11.5
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/17 00:45