0
votes

Données du groupe dans la vue de la collection d'en-tête

Comment puis-je regrouper mes données reçues de Firebase for fort> dans Collection d'en-tête forte>?

de Firebase Strong> J'ai reçu Array avec ces données: p> xxx pré>

pour récupérer les données de Firestore fort> J'utilise ce code: p>

protocol BookingDocumentSerializable {
    init?(dictionary:[String:Any])
}

struct BookingHall {

    var contactInfo: [String: Any] = [:]
    var creationDate: Timestamp
    var requestedTimes: [Int] = []
    var uid: String = ""
    var hall: String = ""
    var requestedDate: Int = 0

    var dictionary: [String: Any] {

        return [

            "contact_info": contactInfo,
            "creation_date": creationDate,
            "requested_times": requestedTimes,
            "uid": uid,
            "hall": hall,
            "requested_date": requestedDate

        ]
    }
}

extension BookingHall: BookingDocumentSerializable {

    init?(dictionary: [String: Any]) {

        let contactInfo = dictionary["contact_info"] as? [String: Any] ?? [:]
        let creationDate = dictionary["creation_date"] as? Timestamp
        let requestedTimes = dictionary["requested_times"] as? [Int] ?? []
        let uid = dictionary["uid"] as? String ?? ""
        let hall = dictionary["hall"] as? String ?? ""
        let requestedDate = dictionary["requested_date"] as? Int ?? 0

        self.init(contactInfo: contactInfo,
                  creationDate: creationDate!,
                  requestedTimes: requestedTimes,
                  uid: uid,
                  hall: hall,
                  requestedDate: requestedDate)    
    }
}


1 commentaires

ajouté mon structure


4 Réponses :


0
votes

Vous pouvez utiliser un supplémentView décrit dans d'autres commentaires, mais en fonction du résultat que vous souhaitez obtenir, vous pouvez envisager cette option:

Soit utableview & chaque utableviewCell aura un uicollectionview à l'intérieur. Dans ce cas, vous pouvez mettre toutes vos données dans les cellules CollectionView , tandis que les en-têtes appartiennent au TableView

 la description de la réponse

Quel est l'avantage dans ce cas? Toute votre vue est vertical-défilable , mais chaque cellule peut être indépendamment horizontale-défilable


0 commentaires

3
votes

Créer un dictionnaire pour stocker les données groupées xxx pré>

après avoir attribué des valeurs sur Self.Bookinghall Array Groupez les données à la date p>

func numberOfSections(in collectionView: UICollectionView) -> Int {
    return groupedHalls.keys.count
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return groupedHalls[Array(groupedHalls.keys)[section]]?.count ?? 0
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let bookingHalls = groupedHalls[Array(groupedHalls.keys)[indexPath.section]]
    let bookingHall = bookingHalls[indexPath.row]
    let timeStart = bookingHall.requestedTimes.first!
    let timeEnd = bookingHall.requestedTimes.last! + 1
    cell.timeLabel.text = String(format: "%02d:00 - %02d:00", timeStart, timeEnd)
    print(bookingHall)
}
func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
    let header = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "headerBook", for: indexPath) as! StudioBookCollectionReusableView
    header.dateLabel.text = "\(Array(groupedHalls.keys)[indexPath.section])"
    return header
}


0 commentaires

0
votes

Vous devez cartographier votre JSON comme [(int, [(int, int)])] Code>: Votre tableau ressemblera à:

func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
    let header = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "headerBook", for: indexPath) as! StudioBookCollectionReusableView

    header.dateLabel.text = arrayForCollectionView[indexPath.section].0

    return header
}


0 commentaires

4
votes

Vous pouvez utiliser regrouper pour atteindre votre besoin.

init (groupement: par :)

crée un nouveau dictionnaire dont les clés sont les groupements retournés par le la fermeture donnée et dont les valeurs sont des tableaux des éléments qui retourné chaque clé.

Veuillez vous référer ci-dessous, c'est une idée juste de savoir comment vous pouvez implémenter l'exigence ci-dessus afin que je demande s'il vous plaît ignorer une autre erreur syntaxiale. xxx

< Strong> Créez une nouvelle structure pour le titre et la sous-réseau xxx


2 commentaires

Quel moyen est dict [dict]!) ?


Heureux d'entendre! Joyeux codage