teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

コードの修正

2019/11/18 11:27

投稿

hayabusabusash
hayabusabusash

スコア776

answer CHANGED
@@ -28,7 +28,7 @@
28
28
  }
29
29
 
30
30
  // ドキュメントの内容を取り出す
31
-      if let data = documentSnapshot.data() {
31
+      if let data = documentSnapshot?.data() {
32
32
  let groupName = data["groupname"] as? String
33
33
  let groupPassword = data["grouppassword"] as? String
34
34
 
@@ -64,7 +64,7 @@
64
64
  }
65
65
 
66
66
  // ドキュメントの内容を取り出す
67
-       if let data = documentSnapshot.data() {
67
+ if let data = documentSnapshot?.data() {
68
68
  // 強制キャストにしました
69
69
  let storedGroupName = data["groupname"] as! String
70
70
  let storedGroupPassword = data["grouppassword"] as! String

2

コードを修正

2019/11/18 11:27

投稿

hayabusabusash
hayabusabusash

スコア776

answer CHANGED
@@ -53,6 +53,7 @@
53
53
  let name = nameTextField.text ?? ""
54
54
  let groupname = groupnameTextField.text ?? ""
55
55
 
56
+ // ここに追加
56
57
  database.collection("group")
57
58
  .document("groupname")
58
59
  .getDocument { [weak self] (documentSnapshot, error) in
@@ -64,7 +65,7 @@
64
65
 
65
66
  // ドキュメントの内容を取り出す
66
67
        if let data = documentSnapshot.data() {
67
- // 強制アンラップにしました
68
+ // 強制キャストにしました
68
69
  let storedGroupName = data["groupname"] as! String
69
70
  let storedGroupPassword = data["grouppassword"] as! String
70
71
 

1

コードを追加する場所について追記

2019/11/17 16:34

投稿

hayabusabusash
hayabusabusash

スコア776

answer CHANGED
@@ -39,4 +39,50 @@
39
39
  ```
40
40
 
41
41
  とりあえず両方とも`String?`にしておきました。
42
- Firestoreの構成が違ったり、フィールド名が違ったりしたら教えてください????‍♂️
42
+ Firestoreの構成が違ったり、フィールド名が違ったりしたら教えてください????‍♂️
43
+
44
+ ## 2019/11/17追記(コードを追加する場所について)
45
+
46
+ `didTapSignUpButton()`の中でいいと思います。
47
+ 非同期処理が続くので、`self`のキャプチャーに気をつけてください。([参考](https://qiita.com/_tid_/items/df7f1b76f156bd758c1a))
48
+
49
+ ```Swift
50
+ @IBAction private func didTapSignUpButton() {
51
+ let email = emailTextField.text ?? ""
52
+ let password = passwordTextField.text ?? ""
53
+ let name = nameTextField.text ?? ""
54
+ let groupname = groupnameTextField.text ?? ""
55
+
56
+ database.collection("group")
57
+ .document("groupname")
58
+ .getDocument { [weak self] (documentSnapshot, error) in
59
+ guard let self = self else { return }
60
+
61
+ if let error = error {
62
+ print(error)
63
+ }
64
+
65
+ // ドキュメントの内容を取り出す
66
+       if let data = documentSnapshot.data() {
67
+ // 強制アンラップにしました
68
+ let storedGroupName = data["groupname"] as! String
69
+ let storedGroupPassword = data["grouppassword"] as! String
70
+
71
+ // Firestore側のデータとテキストフィールドの値を比較
72
+ if groupname == storedGroupName && password == storedGroupPassword {
73
+ // Authの処理
74
+ Auth.auth().createUser(withEmail: email, password: password) { [weak self] result, error in
75
+ guard let self = self else { return }
76
+
77
+ // 後の処理は同じなので省略します
78
+ }
79
+ }
80
+ } else {
81
+ // Firestore側のgroupNameとgroupPasswordが一致しない時の処理
82
+ }
83
+ }
84
+ }
85
+ ```
86
+
87
+ 一応質問に貼っていただいたコードと変数名とかを合わせたつもりですが、
88
+ 動かなかったりしたら教えてください????‍♂️