2017-10-14 2 views
1

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)" 
     } 
    } 
} 
+0

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?' –

+0

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

Répondre

0

Si votre objectif est de trier votre tableau de Person objets puis trier contacts:

@IBAction func save(_ sender: Any) { 
    contacts.append(Person(name: a.text!)) 
    contacts.sort { $0.name < $1.name } 
    label.text = contacts.map { $0.description }.joined(separator: "\n") 
} 

Et comme mentionné dans les commentaires, vous devriez mettre à jour votre Person struct:

struct Person: CustomStringConvertible { 
    let name: String 

    var description: String { 
     return name 
    } 
} 
0

Vous pouvez trier myStruct comme ci-dessous:

Person.myStruct.sorted { $0 < $1 } 
+0

J'essaie de trier le nom var pas statique var myStruct. Comment ferais-je cela? –