Ios 两个相同类型的数组,一个正在更新,另一个为nil

Ios 两个相同类型的数组,一个正在更新,另一个为nil,ios,swift,firebase,firebase-realtime-database,nsobject,Ios,Swift,Firebase,Firebase Realtime Database,Nsobject,我有两个数组,一个在视图控制器中(var-usersRooms:[Room]=[]),另一个在User对象中(var-rooms:[Room]=[])。视图控制器中有对对象的引用(var currentUser:User?)。A您可以看到,两个阵列都是[Room]类型 在下面的函数中,我调用Firebase来检索用户信息并设置user对象 func getUserInfo() { guard let uid = FIRAuth.auth()?.currentUser?.uid else

我有两个数组,一个在视图控制器中(
var-usersRooms:[Room]=[]
),另一个在
User
对象中(
var-rooms:[Room]=[]
)。视图控制器中有对对象的引用(
var currentUser:User?
)。A您可以看到,两个阵列都是
[Room]
类型

在下面的函数中,我调用Firebase来检索用户信息并设置
user
对象

func getUserInfo() {

    guard let uid = FIRAuth.auth()?.currentUser?.uid else {print("Error getting user UID"); return}
    let userRef: FIRDatabaseReference = FIRDatabase.database().reference().child("users").child(uid)
    let userRoomRef: FIRDatabaseReference = FIRDatabase.database().reference().child("users").child(uid).child("rooms")
    self.currentUser?.uid = uid

    userRef.observeSingleEvent(of: .value, with: { (snapshot) in

        if let usersDict = snapshot.value as? NSDictionary {
            print("\n\nUserDict: \(usersDict)\n\n")
            guard let name = usersDict["name"] as? String else {print("Error getting user's name"); return}
            guard let handle = usersDict["handle"] else {print("Error getting user's handle"); return}
            guard let gender = usersDict["gender"] else {print("Error getting user's gender"); return}
            guard let profilePicture = usersDict["profilePicture"] else {print("Error getting user's profilePicture"); return}

            // how to get user's rooms from FB and add into User object's rooms array??
            userRoomRef.observeSingleEvent(of: .value, with: { (roomSnap) in

                for eachRoom in roomSnap.value as! [String : AnyObject] {
                    let roomID = eachRoom.key as! String
                    userRoomRef.child(roomID).observeSingleEvent(of: .value, with: { (roomSnap) in

                        if let roomInfo = roomSnap.value as? [String : AnyObject] {

                            guard let roomName = roomInfo["roomName"] as! String! else {print("Error getting room name"); return}
                            guard let participants = roomInfo["participants"] as! [String]! else {print("Error getting room participants"); return}
                            print("\n\nRoom Name: \(roomName)\nRoom Participants: \(participants)\nRoom ID: \(roomID)\n")

                            self.usersRooms.append(Room(id: roomID, name: roomName, participants: participants))
                            self.currentUser?.rooms.append(Room(id: roomID, name: roomName, participants: participants))

                            print("\n\nUser's Rooms: \(self.usersRooms)\n\n")
                            print("\n\nRooms (from currentUser): \(self.currentUser?.rooms)\n\n")
                        }
                    })
                }
            })

            print("\nRoomsTableViewController User Values:\n\nName: \(name)\nHandle: \(handle)\nGender: \(gender)\nProfile Picture: \(profilePicture)\n\n")
            self.currentUser?.handle = handle as! String
            self.currentUser?.name = name
            self.senderDisplayName = name
            self.currentUser?.profilePicture = profilePicture as! String
            self.currentUser?.gender = gender as! String
        }
    })
}
在该函数中,我尝试以完全相同的方式附加两个数组作为测试:

self.usersRooms.append(Room(id: roomID, name: roomName, participants: participants))
self.currentUser?.rooms.append(Room(id: roomID, name: roomName, participants: participants))
当我在下一行打印它们时,
usersRooms
数组按预期充满了
Room
对象。但是,
User
currentUser.rooms
中的数组为零。即使我尝试说
self.currentUser?.rooms=self.usersRooms
,它仍然是零


为什么我可以在我的对象中设置
usersRooms
数组,但不能设置相同的数组?

如果
self.currentUser
nil
,那么可选的链接
self.currentUser?.rooms.append()
self.currentUser?.rooms=…
可以。。。。没什么@MartinR但是不应该用append填充self.currentUser.rooms,就像填充
usersRooms
数组一样?它们是相同的东西,即一个类型为
Room
的数组,那么为什么一个填充了append,而另一个没有?基本上,当它们都是Swift书籍中的一个
var*whatever*:[Room]=[]
查找“可选链接”时,我对一个有效而另一个无效的原因感到困惑。如果
a
nil
a?。无论什么…
都不起作用。如果不分配当前用户,那么当前用户应该来自哪里?
currentUser
user
对象,在视图控制器中使用
var currentUser:user?
初始化。所有其他currentUser值的设置都没有问题,我遇到这个问题的只是
房间
,所以我想知道如何设置
房间
,就像我在同一个函数中成功设置了所有其他值一样。正如我所说,为什么我可以设置
var usersRooms:[Room]=[]
,而不能设置
var rooms:[Room]=[]