2017-10-14 167 views
1

我的代碼現在將條目附加到結構中。如果按下按鈕,它將條目添加到標籤並對標籤進行分類。所以按下按鈕 - >進入結構 - >結構被打印和排序在標籤上。我希望結構中的每個條目都能以編程方式排序,就像我通過影響標籤的操作按鈕一樣。按字母順序排序struct(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

只需更新一些代碼即可。讓您的人物屬性名稱保持不變。 description屬性可以只返回name。你忘了給Person添加一個CustomStringConvertible協議'struct Person:CustomStringConvertible'。並且不要使用'count == 0'來檢查你的數組是否爲空。使用isEmpty屬性'contacts.isEmpty?' –

+0

Sam,我不清楚你的問題是什麼。當然,你可以像Leo和rmaddy所說的那樣邊緣調整,但是他們完成的東西非常像你所擁有的。如果您的標籤中沒有看到多行,請務必將'numberOfLines'設置爲零或大於'1'的某個值。 – Rob

回答

0

如果你的目標是再排序contacts排序您Person對象數組:

@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") 
} 

而作爲在評論中提到的,你應該更新你的Person結構:

struct Person: CustomStringConvertible { 
    let name: String 

    var description: String { 
     return name 
    } 
} 
0

您可以排序myStruct象下面這樣:

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

我想排序var名稱不是靜態var myStruct。我會怎麼做? –