为什么我的模型没有在View Controller中显示其成员?

时间:2019-01-13 05:17:05

标签: swift database model member

我有一个名为Profile的模型,其中有2个成员posPointsnegPoints。我正在尝试在名为MyProfileViewController的VC上显示当前用户的积分。但是,当我输入profiles.posPoints时,Xcode无法识别它,并给我这个错误

  

“ [个人资料]”类型的值没有成员“ posPoints”

static func show(for user: User = User.current, completion: @escaping (Profile?) -> Void) {

    let profileRef = Database.database().reference().child("profile").child(user.username)
    let ref = Database.database().reference().child("profile").child(user.username).child(profileRef.key ?? "")

    ref.observeSingleEvent(of: .value, with: { (snapshot) in
        guard let profile = Profile(snapshot: snapshot) else {
            return completion(nil)
        }

        completion(profile)
    })
}

import Foundation
import FirebaseDatabase.FIRDataSnapshot

class Profile {

    // MARK - Properties

    var key: String?
    let posPoints: Int
    let negPoints: Int

    init?(snapshot: DataSnapshot) {
        guard !snapshot.key.isEmpty else {return nil}
        if let dict = snapshot.value as? [String : Any]{

            let posPoints = dict["posPoints"] as? Int
            let negPoints = dict["negPoints"] as? Int

            self.key = snapshot.key
            self.posPoints = posPoints ?? 0
            self.negPoints = negPoints ?? 0
        }
        else{
            return nil
        }
    }
}

(在MyProfileViewController的viewDidLoad中)

ProfileService.show { [weak self] (profiles) in
        self?.profiles = profiles
    }
    myPointsLabel.text = profiles.posPoints
}

Firebase数据库视图

Firebase Database

1 个答案:

答案 0 :(得分:0)

您在viewDidLoad中的代码存在以下问题。

1-myPointsLabel内更新completionHandler,完成了profiles的获取。

2- UI更新应在主线程上完成。

3-首先,从profile的{​​{1}}中提取所需的array,然后访问点并将其转换为profiles。 / p>

您的代码应如下所示,

String