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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

2回答

2101閲覧

Argument passed to call that takes no arguments

Udemy.seitaro

総合スコア11

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2020/06/30 12:19

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

ViewController

1 2 3 guard let data = snapshot?.data() else { return } 4 let user = User.init(dic: data) 5 print("ユーザー情報の取得ができました。(user.name)") 6 HUD.hide { (_) in 7 HUD.flash(.success, onView: self.view, delay: 1) { (_) in 8 self.presentToHomeViewController(user: user) 9 } 10 } 11 } 12 } 13 14

HomeViewController

1import Foundation 2import UIKit 3import Firebase 4 5class HomeViewController: UIViewController { 6 7 var user: User? { 8 didSet { 9 print("user?.name: ", user?.name) 10 } 11 } 12 13 @IBOutlet weak var nameLabel: UILabel! 14 @IBOutlet weak var emailLabel: UILabel! 15 @IBOutlet weak var dateLabel: UILabel! 16 @IBOutlet weak var logoutButton: UIButton! 17 18 @IBAction func tappedLogoutButton(_ sender: Any) { 19 handleLogout() 20 } 21 22 private func handleLogout() { 23 do { 24 try Auth.auth().signOut() 25 presentToSignUpViewController() 26 } catch (let err) { 27 print("ログアウトに失敗しました: (err)") 28 } 29 } 30 31 override func viewDidLoad() { 32 super.viewDidLoad() 33 34 35 logoutButton.layer.cornerRadius = 10 36 37 if let user = user { 38 nameLabel.text = user.name + "さんようこそ" 39 emailLabel.text = user.email 40 let dateString = dateFormatterForCreatedAt(date: user.createdAt.dateValue()) 41 dateLabel.text = "作成日: " + dateString 42 } 43 44 } 45 46 override func viewDidAppear(_ animated: Bool) { 47 super.viewDidAppear(animated) 48 confirmLoggedInUser() 49 } 50 51 private func confirmLoggedInUser() { 52 if Auth.auth().currentUser?.uid == nil || user == nil { 53 presentToSignUpViewController() 54 } 55 } 56 57 private func presentToSignUpViewController() { 58 let storyBoard = UIStoryboard(name: "SignUp", bundle: nil) 59 let viewController = storyBoard.instantiateViewController(identifier: "ViewController") as! ViewController 60 let navController = UINavigationController(rootViewController: viewController) 61 navController.modalPresentationStyle = .fullScreen 62 self.present(navController, animated: true, completion: nil) 63 } 64 65 private func dateFormatterForCreatedAt(date: Date) -> String { 66 let formatter = DateFormatter() 67 formatter.dateStyle = .long 68 formatter.timeStyle = .none 69 formatter.locale = Locale(identifier: "ja_JP") 70 return formatter.string(from: date) 71 } 72 73} 74 75

LoginViewController

1 2 3 4 guard let uid = res?.user.uid else { return } 5 let userRef = Firestore.firestore().collection("users").document(uid) 6 userRef.getDocument { (snapshot, err) in 7 if let err = err { 8 print("ユーザー情報の取得に失敗しました。(err)") 9 HUD.hide { (_) in 10 HUD.flash(.error, delay: 1) 11 } 12 return 13 } 14 15

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

swift

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言語を学ぶ

swift

1 print("user?.name: ", user?.name)

swift

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

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

投稿2020/06/30 20:35

hoshi-takanori

総合スコア7895

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Udemy.seitaro

2020/07/03 07:32

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

0

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

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

投稿2020/06/30 12:41

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Udemy.seitaro

2020/06/30 14:00

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問