如何使用一个属性从多个文本字段中排序数组

时间:2016-04-02 20:07:10

标签: swift

我正在寻找这个问题的答案,但我找不到任何东西。我是swift编程的新手,也是stackoverflow的新手,所以我希望有人能帮助我。

我尝试使用" EditViewController"制作应用。其中有多个文本字段用于名称,名称等。

我能保存这个"电话簿"条目,但我无法按属性名称对数组进行排序。

编辑界面只有以下代码:

import UIKit

class EditViewController: UIViewController {
    @IBOutlet weak var vornameTextField: UITextField!
    @IBOutlet weak var nameTextField: UITextField!
    @IBOutlet weak var adresseTextField: UITextField!
    @IBOutlet weak var hausnummerTextField: UITextField!
    @IBOutlet weak var plzTextField: UITextField!
    @IBOutlet weak var ortTextField: UITextField!
    @IBOutlet weak var telefonnummerTextField: UITextField!
    @IBOutlet weak var berufTextField: UITextField!

    override func viewDidLoad()
    {
        super.viewDidLoad()
    }



    override func didReceiveMemoryWarning()
    {
        super.didReceiveMemoryWarning()
    }

}

保存文本字段的代码是:

import UIKit

class Telefonbuch: NSObject, NSCoding
{
    var name: String!
    var vorname: String!
    var beruf: String!
    var telefonnummer: String!
    var adresse: String!
    var hausnummer: String!
    var plz: String!
    var ort: String!

    init(name: String, vorname: String, beruf:String, telefonnummer:  String, adresse: String, hausnummer: String, plz: String, ort: String)
    {
        self.name = name
        self.vorname = vorname
        self.beruf = beruf
        self.telefonnummer = telefonnummer
        self.adresse = adresse
        self.hausnummer = hausnummer
        self.plz = plz
        self.ort = ort
    }

    required init?(coder aDecoder: NSCoder) {
        name = aDecoder.decodeObjectForKey("name") as? String
        vorname = aDecoder.decodeObjectForKey("vorname") as? String
        beruf = aDecoder.decodeObjectForKey("beruf") as? String
        telefonnummer = aDecoder.decodeObjectForKey("telefonnummer") as? String
        adresse = aDecoder.decodeObjectForKey("adresse") as? String
        hausnummer = aDecoder.decodeObjectForKey("hausnummer") as? String
        plz = aDecoder.decodeObjectForKey("plz") as? String
        ort = aDecoder.decodeObjectForKey("ort") as? String
    }


    func encodeWithCoder(aCoder: NSCoder) {
        aCoder.encodeObject(name, forKey: "name")
        aCoder.encodeObject(vorname, forKey: "vorname")
        aCoder.encodeObject(beruf, forKey: "beruf")
        aCoder.encodeObject(telefonnummer, forKey: "telefonnummer")
        aCoder.encodeObject(adresse, forKey: "adresse")
        aCoder.encodeObject(hausnummer, forKey: "hausnummer")
        aCoder.encodeObject(plz, forKey: "plz")
        aCoder.encodeObject(ort, forKey: "ort")
    }


    static func saveArray(data: [Telefonbuch])
    {
        if data.count == 0 {return}

        if let path = getFilePath() {

            NSKeyedArchiver.archiveRootObject(data, toFile: path)
        }
    }



    static func loadArray() -> [Telefonbuch]
    {
        if let path = getFilePath() {

           if let result = NSKeyedUnarchiver.unarchiveObjectWithFile(path) as? [Telefonbuch]
           {
            return result
            }

        }

        return [Telefonbuch]()
    }



    private static func getFilePath() -> String?
    {
        let pfd = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)

        if let pfad = pfd.first {
            return pfad + "Kontakte.bin"
        }else {
            return nil
        }
    }

}

现在我想制作tableview,在那里我显示数据,排序和标题。但是我无法按属性名称对[Telefonbuch]数组进行排序。

import UIKit

class OverViewController: UIViewController {

@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var addButton: UIBarButtonItem!
@IBOutlet weak var editButton: UINavigationItem!


var kontaktListe = Telefonbuch.loadArray()

override func viewDidLoad()
{
    super.viewDidLoad()
    tableView.dataSource = self
    tableView.reloadData()
}


override func didReceiveMemoryWarning()
{
    super.didReceiveMemoryWarning()
}


@IBAction func addButtonPressed(sender: AnyObject)
{
    performSegueWithIdentifier("editSegue", sender: self)
}


@IBAction func returnToMainController(segue: UIStoryboardSegue)
{
    if let scr = segue.sourceViewController as? EditViewController
    {
        let newvorname = scr.vornameTextField.text
        let newname = scr.nameTextField.text
        let newadresse = scr.adresseTextField.text
        let newhausnummer = scr.hausnummerTextField.text
        let newpostleitzahl = scr.plzTextField.text
        let newort = scr.ortTextField.text
        let newtelefonnummer = scr.telefonnummerTextField.text
        let newberuf = scr.berufTextField.text

        let newKontakt = Telefonbuch(name: newname!, vorname: newvorname!, beruf: newberuf!, telefonnummer: newtelefonnummer!, adresse: newadresse!, hausnummer: newhausnummer!, plz: newpostleitzahl!, ort: newort!)

        kontaktListe.insert(newKontakt, atIndex: 0)
        Telefonbuch.saveArray(kontaktListe)
        tableView.reloadData()
    }
}

    extension OverViewController: UITableViewDataSource
{
    func numberOfSectionsInTableView(tableView: UITableView) -> Int
{
    return 3
}


func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
    return kontaktListe.count
}


func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
    let cell = tableView.dequeueReusableCellWithIdentifier("ProtoCell", forIndexPath: indexPath)
    let row = indexPath.row
    cell.textLabel?.text = kontaktListe[row].name + " " + kontaktListe[row].vorname
    cell.detailTextLabel?.text = kontaktListe[row].ort

    return cell
}

func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool
{
    return true
}


func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath)
{
    if editingStyle == .Delete
    {
        kontaktListe.removeAtIndex(indexPath.row)
        tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
        tableView.reloadData()
    }
}



extension OverViewController: UITableViewDelegate
{
    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
{

    performSegueWithIdentifier("detailSegue", sender: self)


}

}

任何人都可以帮助我,因为我找不到解决方案。

提前致谢。

1 个答案:

答案 0 :(得分:2)

您应该能够使用以下内容对数组进行排序:

kontaktListe.sort({ $0.name > $1.name })