Udemyでswiftを勉強中です。
クロージャーについて理解しようとしています。
① ②:自分の理解が正しいか見てほしい
③~⑤:質問の回答をしてほしい
以下の①と②のコードの理解が正しいかと③~⑤について解説をお願いしたいです。
※質問に付随されると思われるUserService構造体とUserカスタムクラスは最後の方にあります。
① func fetchUser() { UserService.fetchUser(completion: (User) -> Void) }
①引数にUser型を取る、戻り値はない。
↓上記の補完にエンターを押すと下記のコードが生成されます。
② func fetchUser() { UserService.fetchUser { (<User>) in <code> } }
②<User>にはUser型のプロファイルを入れる必要がある
↓実際にUdemyの先生が書いたコード
func fetchUser() { UserService.fetchUser { (user) in self.user = user } }
③<code>内には返り値があるないで書く内容にどのような変化があるのでしょうか。
リンク内容
上記の記事では、
返り値あり:return
返り値なし:print
となっていますが、今回の場合は返り値なしパターンなのですが、printはありません。
以下質問です。
④self.user = user
がprintに代替されるものだとして、なぜ代替できるのか?
⑤返り値ありではself.user = user
が書けないのか、またその理由はなぜか。
よろしくお願い致します。
// UserService.swift import Firebase struct UserService { static func fetchUser(completion: @escaping(User) -> Void) { guard let uid = Auth.auth().currentUser?.uid else { return } COLLECTION_USERS.document(uid).getDocument { snapshot, error in guard let dictionary = snapshot?.data() else { return } let user = User(dictionary: dictionary) completion(user) } } }
/// Userのカスタムクラス
// User.swift import Foundation struct User { let email: String let fullname: String let profileImageUrl: String let username: String let uid: String init(dictionary: [String: Any]) { self.email = dictionary["email"] as? String ?? "" self.fullname = dictionary["fullname"] as? String ?? "" self.profileImageUrl = dictionary["profileImageUrl"] as? String ?? "" self.username = dictionary["username"] as? String ?? "" self.uid = dictionary["uid"] as? String ?? "" } }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/02 12:46 編集
2021/02/02 12:47
2021/02/02 12:49
2021/02/02 12:50
2021/02/02 12:55
2021/02/02 12:59
2021/02/02 13:28