Swift Как получить пользователя с идентификатором пользователя - PullRequest
0 голосов
/ 02 февраля 2019

Я новичок в Swift или, вернее, во всем мире программирования, и я пытаюсь научиться программировать в Swift.Я получил табличное представление с ячейками (VC1), которые содержат различную информацию, предоставленную пользователем.Я хочу щелкнуть по ячейке, чтобы перейти к новому ВК по Segue.Этот новый VC должен отображать информацию о пользователе, который разместил эту информацию.Я передаю userID от VC1 до VC2 по segue.В VC2 я хочу загрузить информацию о пользователе, используя ID пользователя.

Я использую UserModel

import Foundation

class UserModel {

    var username: String?
    var email: String?
    var profilImageUrl: String
    var birthdayDate: String?
    var gender: String?

    init(dictionary: [String: Any]) {
        username = dictionary["username"] as? String
        email = dictionary["email"] as? String
        profilImageUrl = dictionary["profilImageURL"] as? String ?? ""
        birthdayDate = dictionary["Geburtsdatum"] as? String
        gender = dictionary["gender"] as? String
    }
}

Передача userID VC1 -> VC2 работает, я проверил это с помощью команды печати

Мой код из VC2:

//MARK: - Outlets

@IBOutlet weak var nameLabel: UILabel!

//MARK: Var/ Let

var event: EventModel?
var users = [UserModel]()


var user: UserModel?{
    didSet {
        guard let _username = user?.username else {return}
        nameLabel.text = _username
    }
}

func loadUserDeatails(){
    guard let userID = event?.uid else {return}
    fetchUser(uid: userID)
}

func fetchUser(uid: String) {
    let userRef = Database.database().reference().child("users").child(uid)
    userRef.observeSingleEvent(of: .value) { (snapshot) in
        guard let dic = snapshot.value as? [String: Any] else {return}
        let newUser = UserModel(dictionary: dic)
        self.users.append(newUser)
    }
}

override func viewDidLoad() {
    super.viewDidLoad()

    loadUserDeatails()
    print(users)
}

nameLabel пусто, а также массив (пользователи), который я пытался напечатать в ViewDidLoad.Var "dic" содержит информацию о пользователе, которую я скачал с "guard let userID = event? .Uid", так что я думаю, что это должно быть правильно.Надеюсь, кто-нибудь может мне помочь:)

1 Ответ

0 голосов
/ 02 февраля 2019

Я не уверен, что делает event, но один из подходов таков:

В VC1: При подготовке к передаче, как только вы получите ссылку на VC2,

let vc2 = segue.destination as! VC2
vc2.userId = "<USER_ID>" // Pass userId to VC2

В VC2: didSet из var userId выполнит выборку, затем назначит имя пользователя для nameLabel.text напрямую.

var userId: String? {
        didSet {
            // Do the fetch user details here
            guard let userId = userId else {return}
            let userRef = Database.database().reference().child("users").child(userID)
            userRef.observeSingleEvent(of: .value) { (snapshot) in
                guard let dic = snapshot.value as? [String: Any] else {return}
                let newUser = UserModel(dictionary: dic)

                // Once your get user detail data, set the label text
                nameLabel.text = newUser["username"] ?? ""
            }
        }
    } 

Попробуйте следующее, это может сработать.

var user: UserModel?{
    didSet {
        guard let _username = user?.username else {return}

        guard let userID = event?.uid else {return}

        let userRef = Database.database().reference().child("users").child(userID)
        userRef.observeSingleEvent(of: .value) { (snapshot) in
            guard let dic = snapshot.value as? [String: Any] else {return}
            let newUser = UserModel(dictionary: dic)
            nameLabel.text = newUser["username"] ?? ""
        }
    }
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...