Эта проблема заключается в том, что Firebase является асинхронным, поэтому вам нужно дать Firebase время для извлечения и возврата запрошенных данных. то есть данные действительны только в закрытии.
Ваш код присваивает значения с let items = ... вне замыкания, и этот код будет выполняться до того, как данные будут возвращены. Переместите назначение внутрь, как замыкание, вот так (для краткости код сокращен)
func fetchDevies() {
let ref = Database.database().reference().child("some_node").child("Rooms")
ref.observeSingleEvent(of: .value, with: { snapshot in
let value = snapshot.value as? NSDictionary
if let deviceRooms1 = value?["Rooms1"] as? String {
self.deviceRoom1 = deviceRooms1
}
.
.
.
let items = [self.deviceRoom1, self.deviceRoom2, self.deviceRoom3, self.deviceRoom4, self.deviceRoom5]
print(items)
})
//code here will run before Firebase has returned data and populated the vars
Также будьте осторожны с именами переменных. Если вы обращаетесь к классу var, всегда обращайтесь к нему с помощью self. как self.deviceRoom1