2 votes

joindre les éléments d'un tableau en une seule chaîne pour une étiquette dans swift 3

Dans mon application, j'ai un tableau qui me revient d'une API et actuellement, il crée une nouvelle étiquette pour chaque élément et les empile les uns sur les autres. J'aimerais qu'il crée une étiquette où les éléments du tableau sont dans une chaîne de caractères séparée par une puce. Voici mon code de travail actuel :

lblLeft.text = ""

if let expertiseCount = helper.expertise {
    for i in 0..<expertiseCount.count {
        if i >= 0 {
            print(expertiseCount[i].name!)
            let paragraphStyle = NSMutableParagraphStyle()
            paragraphStyle.lineSpacing = 10
            let attrString = NSMutableAttributedString(string: lblLeft.text! + "\(expertiseCount[i].name ?? "")\n")
            attrString.addAttribute(NSParagraphStyleAttributeName, value:paragraphStyle, range: NSMakeRange(0, attrString.length))
            lblLeft.attributedText = attrString        
        }
    }
} 

ressemble actuellement à l'image de gauche, je veux qu'il ressemble à l'image de droite. enter image description here

4voto

deville Points 2004

Vous n'avez pas besoin de passer en boucle votre expertiseCount de la gamme. En Swift, les tableaux de chaînes de caractères disposent d'une méthode spéciale joined(separator:) qui devrait faire exactement ce dont vous avez besoin :

let joinedExpertise = expertiseCount.joined(" • ")

Utilisez un caractère spécial pour les puces, comme séparateur.

2voto

Reinier Melian Points 13437

En tenant compte du fait que votre Expertise classe .name est ce que vous devez concaténer, vous pouvez utiliser map et après cela, comme le suggère la réponse de @Andrii, utilisez join et enfin l'ajustement de la paragraphStyle.lineBreakMode Remplacez votre code par celui-ci

if let expertiseCount = helper.expertise {
    let paragraphStyle = NSMutableParagraphStyle()
    paragraphStyle.lineSpacing = 10
    paragraphStyle.lineBreakMode = .byWordWrapping
    let finalString = expertiseCount.map({$0.name}).joined(separator: " • ")
    let finalAttributedString = NSMutableAttributedString(string: finalString, attributes: [NSParagraphStyleAttributeName:paragraphStyle])
    lblLeft.attributedText = finalAttributedString
}

J'espère que cela vous aidera

0voto

valcanaia Points 947

Je modifierais votre code comme suit :

if let expertise = helper.expertise {
    let expertises = expertise.joined(" • ") // join the strings with bullet point char

    let paragraphStyle = NSMutableParagraphStyle()
    paragraphStyle.lineSpacing = 10
    paragraphStyle.lineBreakMode = .byWordWrapping // line break by word wrappnig

    let attrString = NSMutableAttributedString(string: expertises)
    attrString.addAttribute(NSParagraphStyleAttributeName, value: paragraphStyle, range: 0..<attrString.characters.count) // not sure i this range will work, change to fit your needs
    lblLeft.attributedText = attrString
}

Ce code n'a pas été testé mais vous avez compris l'idée...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X