如何对一组复杂的 GKEntity 中的所有元素进行排序?

How can I sort all elements in a complex set of GKEntity?

我有4个类像D_Entity,P_Entity,T_Entity and O_Entity,定义如下:

class D_Entity : GKEntity {
     var S_Comp : S_Component!
     .............
} 
class P_Entity : GKEntity {
     var S_Comp : S_Component!
     .............
} 
class T_Entity : GKEntity {
     var S_Comp : S_Component!
     .............
} 
class O_Entity : GKEntity {
     var S_Comp : S_Component!
     .............
} 

是的,所有四个 类 都有相同的 S_Comp 成员,派生如下:

    class S_Component : GKComponent {
     .............
    } 

然后,我将 D_Entity,P_Entity,T_Entity and O_Entity 的所有对象插入到一个名为 entities 的变量中,该变量定义为:

var entities = Set <GKEntity>()

问题是:我想按照 S_Comp's position.y. 的顺序对 entities 中的所有元素进行排序(S_Comp 派生自具有成员 position).在Swift2中,例子显示:

let ySortedEntities = entities.sort {
  let nodeA = [=13=].0.componentForClass(S_Component.self)!.node
  let nodeB = [=13=].1.componentForClass(S_Component.self)!.node
  return nodeA.position.y > nodeB.position.y
}

然而,在Swift4或5中,Xcode报错:

Value of type 'Set<GKEntity>' has no member 'sort'

我在GKEntity里也发现了一个叫sorted的函数,但是不知道在这么复杂的集合里怎么用

有人知道怎么解决吗?

非常感谢。

在Swift 5 Set没有排序功能

因此,您可以像这样使用 Sorted 函数:

let ySortedEntities = entities.sorted(by: {
     let nodeA = [=10=].0.componentForClass(S_Component.self)!.node
     let nodeB = [=10=].1.componentForClass(S_Component.self)!.node
     return nodeA.position.y > nodeB.position.y
})