Пожалуйста, помогите, я действительно борюсь с этим, прочитал несколько тем и обсуждений по этому вопросу, но, похоже, не могу найти проблему.Я применил тот же подход, что и другой блок кода в моем приложении.
Я устанавливаю var
dictionary
со значением при создании экземпляра ViewController
из источника ViewController
.
Но консоль продолжает выводить строку, обернутую в качестве необязательного и, следовательно, также в пользовательском интерфейсе, почему?
sender.name: Liam, 01/13/1990, Optional("Actor")
Установка dictionary
со значением:
var dictionary: [String : Any]!{
didSet{
print("inside InviteVC")
inviteType = dictionary["type"] as? String
inviteId = dictionary["complimentId"] as? String
status = dictionary["status"] as? Bool
timeStamp = dictionary["timeStamp"] as? Int
sender = dictionary["fromUser"] as? User
print("sender.name: \(sender!.firstName), \(sender!.birthday), \(String(describing: sender?.occupation))")
}//end didSet
}//end var
Вот моя модель User:
struct User {
let uid: String
let name: String
let email: String
let profilePictureURL: String
var occupation: String?
let birthday: String
let firstName: String
let lastName: String
let gender: String
let discoverable: Bool
let online: Bool
let discoveryPrefs: [String : Any]
var profileImages = [String]()
init(uid: String, dictionary: [String: Any]) {
self.uid = uid
self.name = dictionary["name"] as? String ?? ""
self.email = dictionary["email"] as? String ?? ""
self.profilePictureURL = dictionary["profilePictureURL"] as? String ?? ""
self.occupation = dictionary["occupation"] as? String ?? ""
self.birthday = dictionary["birthday"] as? String ?? ""
self.firstName = dictionary["firstName"] as? String ?? ""
self.lastName = dictionary["lastName"] as? String ?? ""
self.gender = dictionary["gender"] as? String ?? ""
self.discoverable = dictionary["discoverable"] as? Bool ?? false
self.online = dictionary["online"] as? Bool ?? false
self.discoveryPrefs = dictionary["discoveryPrefs"] as? [String : Any] ?? [String : Any]()
self.profileImages = dictionary["profileImages"] as! [String]
}//end init
}//end class
И здесь я создаю свой объект User:
func getUserInfo(forUserId forId: String, handler: @escaping (User) -> ()) {
REF_USERS.child(forId).observeSingleEvent(of: .value, with: { (snapshot) in
//handle snapshot code here...
var occupa: String?
if let occupation = snapshot.childSnapshot(forPath: "occupation").value as? String {
occupa = occupation
} else {
occupa = ""
}
let dictionary: [String : Any] = ["uid": uid, "name": name, "email": email, "profilePictureURL": profilePictureURL, "birthday": birthday, "firstName": firstName, "lastName": lastName, "gender": gender, "discoverable": discoverable, "online": online, "discoveryPrefs": discoveryPrefs, "profileImages": profileImages!, "occupation": occupa!]
let user = User(uid: uid, dictionary: dictionary)
handler(user)
}, withCancel: { (error) in
print(error)
})
}//end func