2

我正在使用 SwiftyJSON 解析来自网络的 JSON,然后在 tableView 中显示这些值。我想添加一个功能来根据用户名按字母顺序升序或降序对数据进行排序。我是 Swift 新手,在排序时遇到了麻烦。我将不胜感激任何帮助!

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

func getContactListJSON(){
let urlString = "http://jsonplaceholder.typicode.com/users"
let urlEncodedString = urlString.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)
let url = NSURL( string: urlEncodedString!)
var task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, innerError) in
self.json = JSON(data: data)
self.contactsArray = json.arrayValue

dispatch_async(dispatch_get_main_queue(), {

}
 task.resume()
}

这就是我填充我的 tableView 的方式。

 override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    var cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as? UITableViewCell

    if cell == nil {
        cell = UITableViewCell(style: UITableViewCellStyle.Value2, reuseIdentifier: "Cell")
    }

    cell!.textLabel?.text = self.contactsArray[indexPath.row]["name"].stringValue
    cell!.detailTextLabel?.text = self.contactsArray[indexPath.row]["email"].stringValue
   return cell!

}
4

2 回答 2

3

您可以通过使用对 Swift 数组进行排序array.sort

self.contactsArray.sort { $0 < $1 }

您可以参考this了解详情。

于 2015-05-12T14:12:05.983 回答
0

在玩了一会儿之后,我找到了一个更快速友好的答案。我将把下面的 Objective-C 风格作为参考,以防万一。注意——在第一个示例中,被排序的数组必须是可变的(var not let)才能使 sort() 工作。在使用 Obj-C 排序描述符的第二个示例中,创建了一个新数组并且原始数组没有发生变异 - 类似于 sorted()

    let contact1: [String: String] = ["name" : "Dare", "email" : "d@me.com"]
    let contact2: [String: String] = ["name" : "Jack", "email" : "j@me.com"]
    let contact3: [String: String] = ["name" : "Adam", "email" : "A@me.com"]

    var contacts = [contact1, contact2, contact3]

    contacts.sort({$0["name"] <  $1["name"]})

    println(contacts)

这被 Objective-C 破坏了一点,但似乎有效。这种方法相对于另一种方法的主要好处是它不区分大小写。尽管我确信有更好的方法可以使用更新的语法来做同样的事情。

    let contact1: [String: String] = ["name" : "Dare", "email" : "d@me.com"]
    let contact2: [String: String] = ["name" : "Jack", "email" : "j@me.com"]
    let contact3: [String: String] = ["name" : "Adam", "email" : "A@me.com"]

    let contacts: Array = [contact1, contact2, contact3]

    let nameDiscriptor = NSSortDescriptor(key: "name", ascending: true, selector: Selector("caseInsensitiveCompare:"))

    let sorted = (contacts as NSArray).sortedArrayUsingDescriptors([nameDiscriptor])

    println(sorted)

//这些打印以下内容

    [
        {
            email = "A@me.com";
            name = Adam;
        },
        {
            email = "d@me.com";
            name = Dare;
        },
        {
            email = "j@me.com";
            name = Jack;
        }
    ]
于 2015-05-12T14:24:01.957 回答