NSSet 没有下标成员

NSSet has no subscript members

我有一个 CoreData 对象,它的关系是 NSSet。我正在尝试将其用作我的数据源,但得到以下

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

    let cell = playerTableView.dequeueReusableCellWithIdentifier("Cell")! as UITableViewCell
    cell.textLabel?.text = self.game.players[indexPath.row]
    return cell
}

我如何在 tableView 中使用我的 NSSet,我相信这将是无序的,所以每次都可能不同,那么我如何订购这个集合?

我是这样做的:

for player in game.players! {
        orderedPlayers.append(player as! Player)
    }
    orderedPlayers.sortInPlace({ [=10=].name < .name })

您可以使用 allObjects 从集合中获取数组,然后对对象进行排序。

let orderedPlayers = (game.players!.allObjects as! [Player]).sort { [=10=].name < .name }

如果您将集合声明为本机 Swift 类型 Set<Player> – CoreData 还支持 Swift 类型 – 您甚至可以省略类型转换和 allObjects:

let orderedPlayers = game.players!.sort { [=11=].name < .name }

您可以像这样向 game 核心数据 class 添加下标:

subscript(index: Int) -> Player? {
    let descriptor = NSSortDescriptor(key: "name", ascending: true)
    let orderedPlayerArray = players?.sortedArray(using: [descriptor])
    let playerWhereIndex = orderedPlayerArray?[index]
    return playerWhereIndex as? Player
}