質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.81%

Argument passed to call that takes no arguments

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 454

Udemy.seitaro

score 11

こんにちは
いつもお世話になっています。
Firebaseでメールアドレス認証のアプリを作っていたのですがこのようなエラーが起きてしましました。
お手数ですがこのエラー内容が詳しく理解できなかったので教えていただけますでしょうか。
※また、このアプリケーションはこちらのYouTubeをみて作成しております。
字数の問題で一部カットしておりますがご了承ください
ViewController
HomeViewController
LoginViewController

            guard let data = snapshot?.data() else { return }
            let user = User.init(dic: data)
            print("ユーザー情報の取得ができました。\(user.name)")
            HUD.hide { (_) in
                HUD.flash(.success, onView: self.view, delay: 1) { (_) in
                    self.presentToHomeViewController(user: user)
                }
            }
        }
    }
import Foundation
import UIKit
import Firebase

class HomeViewController: UIViewController {

    var user: User? {
        didSet {
            print("user?.name: ", user?.name)
        }
    }

    @IBOutlet weak var nameLabel: UILabel!
    @IBOutlet weak var emailLabel: UILabel!
    @IBOutlet weak var dateLabel: UILabel!
    @IBOutlet weak var logoutButton: UIButton!

    @IBAction func tappedLogoutButton(_ sender: Any) {
        handleLogout()
    }

    private func handleLogout() {
        do {
            try Auth.auth().signOut()
            presentToSignUpViewController()
        } catch (let err) {
            print("ログアウトに失敗しました: \(err)")
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()


        logoutButton.layer.cornerRadius = 10

        if let user = user {
            nameLabel.text = user.name + "さんようこそ"
            emailLabel.text = user.email
            let dateString = dateFormatterForCreatedAt(date: user.createdAt.dateValue())
            dateLabel.text = "作成日: " + dateString
        }

    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        confirmLoggedInUser()
    }

    private func confirmLoggedInUser() {
        if Auth.auth().currentUser?.uid == nil || user == nil {
            presentToSignUpViewController()
        }
    }

    private func presentToSignUpViewController() {
        let storyBoard = UIStoryboard(name: "SignUp", bundle: nil)
        let viewController = storyBoard.instantiateViewController(identifier: "ViewController") as! ViewController
        let navController = UINavigationController(rootViewController: viewController)
        navController.modalPresentationStyle = .fullScreen
        self.present(navController, animated: true, completion: nil)
    }

    private func dateFormatterForCreatedAt(date: Date) -> String {
        let formatter = DateFormatter()
        formatter.dateStyle = .long
        formatter.timeStyle = .none
        formatter.locale = Locale(identifier: "ja_JP")
        return formatter.string(from: date)
    }

}
            guard let uid = res?.user.uid else { return }
            let userRef = Firestore.firestore().collection("users").document(uid)
            userRef.getDocument { (snapshot, err) in
                if let err = err {
                    print("ユーザー情報の取得に失敗しました。\(err)")
                    HUD.hide { (_) in
                        HUD.flash(.error, delay: 1)
                    }
                    return
                }
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

            let user = User.init(dic: data)

その動画シリーズの Ep.5 で User 構造体を作ってますが、これがないと User は Firebase.User の意味になり、Firebase.User は自分で作ることはできない (サインイン・サインアップ時に Firebase が作る) ためにエラーになります。
参考: Resolve naming conflicts - Migrate to the latest Firebase SDK for Swift (v4.0.0)

また、Swift では init はイニシャライザを意味しますが、通常は明示的に .init を付ける必要はなく、let user = User(dic: data) と書きます。(なお、自分で User 構造体を作って、dic を引数に取るイニシャライザを定義する必要があります。詳しくは Ep.5 を見ましょう。というか、動画の説明の順序に問題がある気がする…。)
参考: イニシャライザ | Swift言語を学ぶ

            print("user?.name: ", user?.name)
            nameLabel.text = user.name + "さんようこそ"
            emailLabel.text = user.email
            let dateString = dateFormatterForCreatedAt(date: user.createdAt.dateValue())

これらのエラーも、User 構造体を作ってなくて User が Firebase.User を指しているために起こるエラーです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/07/03 16:32

    hoshitakanori様
    返信遅くなり申し訳ございません。
    ご丁寧に教えていただき誠にありがとうございます。
    Userの意味を詳しく理解できました。
    今後ともよろしくお願いいた致します

    キャンセル

0

google翻訳
引数を取らない呼び出しに渡される引数

とのことですんで、引数なしの関数で、引数を書いてるところを探してみましょう

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/06/30 23:00

    y_waiwai様
    ご回答ありがとうございます。
    こちらなのですが、上記にも記載した通りYouTubeをみて行っており
    また、動画の製作者のxcodeのファイルのcloneがgithubに上がっています。
    それと私のコードを比較したところ間違えている部分はなかったのですが、具体的に因数なしの関数とはどういうことでしょうか。
    お手数をおかけしますが御返信いただけたら幸いです。
    よろしくお願い致します。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.81%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る