Оптимальный способ сделать это - определить Class
для вашего типа.Я понимаю, что вы представляете книги, написанные автором, и имена авторов:
Class Book {
var booksWritten:[Array]?
var authorsName:String?
init(booksFromFB:[Array], nameFromFB:String) {
self.booksWritten = booksFromFB
self.authorsName = nameFromFB
}
}
В вашем ViewController, где вы вызываете Firebase, вы объявляете переменную, которая является массивом Book
s.
var books = [Books]()
Когда вы возвращаете снимок из Firebase, вы инициализируете переменную типа Book со свойствами этой записи:
var ref: DatabaseReference!
ref = Database.database().reference()
ref?.child("Books").observe(DataEventType.value, with: { (snapshot) in
guard let snapshot = snapshot.children.allObjects as? [DataSnapshot] else { return }
for book in snapshot {
let books = book.childSnapshot(forPath: "Books").value as? [String]
let author = book.childSnapshot(forPath: "Author").value as? String
let book = Book(booksFromFB: books, authorFromFB: author)
books.append(book)
}
self.mainTableView.reloadData()
}) { (error) in
print(error.localizedDescription)
}
Для вашей ячейки я бы создал Class.(Не забудьте установить его идентификатор в раскадровке)
class BooksTableViewCell: UITableViewCell {
@IBOutlet weak var books: UILabel!
@IBOutlet weak var author: UILabel!
func configureCell(books:Array, author:String){
self.books.flatMap({$0}).joined() = books
self.author.text=author
}
}
Последний шаг:
func tableView(_ tableView:UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = mainTableView.dequeueReusableCell(withIdentifier: "BooksTableViewCell") as? BooksTableViewCell else { return UITableViewCell() }
let book = books[indexPath.row]
cell.configureCell(books: book.booksWritten, author: book.authorsName)
return cell
}
PS: не забудьте удалить каких-либо наблюдателей, когда они вам больше не нужны.