Mon code ajoute maintenant des entrées à une structure. Si un bouton est pressé, il ajoute l'entrée à une étiquette et trie l'étiquette. Donc Button est pressé -> entré dans struct -> struct est imprimé et trié sur une étiquette. Je veux que chaque entrée de la structure soit triée par programme comme je l'ai fait via le bouton d'action affectant le label.struct de tri par ordre alphabétique (swift4)
import UIKit
class ViewController: UIViewController {
@IBOutlet var a: UITextField!
@IBOutlet var label: UILabel!
var contacts = [Person]()
@IBAction func save(_ sender: Any) {
contacts.append(Person(name: a.text!))
let sortedContacts = contacts.sorted {
($0.name < $1.name)
}
label.text = contacts.count == 0 ? "" : sortedContacts.map { $0.description }.joined(separator: "\n")
}
struct Person {
var name: String
var description: String {
return "\(name)"
}
}
}
Juste quelques notes sur votre code mis à jour. Faites de votre nom de propriété Person une constante. La propriété description peut juste 'return name'. Vous avez oublié d'ajouter à Person un protocole CustomStringConvertible 'struct Person: CustomStringConvertible'. Et n'utilisez pas 'count == 0' pour vérifier si votre tableau est vide. Utilisez la propriété isEmpty 'contacts.isEmpty?' –
Sam, je ne sais pas quelle est votre question. Bien sûr, vous pouvez modifier les bords comme Leo et Rmaddy ont noté, mais ils accomplissent quelque chose de très semblable à ce que vous avez. Si vous ne voyez pas plusieurs lignes dans votre libellé, veillez à définir 'numberOfLines' sur zéro ou sur une valeur supérieure à' 1'. – Rob