在Swift中使用NSMutableArray sortUsingFunction?

在Swift中使用NSMutableArray sortUsingFunction?,swift,nsmutablearray,Swift,Nsmutablearray,这告诉你你的排序函数应该是什么样子,但是我不能让Swift函数看起来像那样 这是我的电话: packetsArray.sortUsingFunction(comparePacketDates, context: nil) 这是我的函数,我尝试了无数其他的函数: static func comparePacketDates(packet1 : AnyObject, packet2: AnyObject, context: UnsafeMutablePointer<Void>) -&g

这告诉你你的排序函数应该是什么样子,但是我不能让Swift函数看起来像那样

这是我的电话:

packetsArray.sortUsingFunction(comparePacketDates, context: nil)
这是我的函数,我尝试了无数其他的函数:

static func comparePacketDates(packet1 : AnyObject, packet2: AnyObject, context: UnsafeMutablePointer<Void>) -> Int {
它总是说“不能用参数列表调用…”表示函数不是第一个参数所期望的


是否有人拥有可以作为Swift sortUsingFunction第一个参数的Swift函数示例代码?甚至是一个c函数,它将被接受为SwiftSortUsingFunction的第一个参数?

以下是我写的一个示例供您参考:

var ma = NSMutableArray()

ma.addObject("Hi")
ma.addObject("Anil")

func comp(first: AnyObject, second:AnyObject,  context: UnsafeMutablePointer<Void>) -> Int {
  let f:String  = first as! String
  let s:String = second as! String

  if f > s {
    return 1
  }
  else if ( f == s ) {
    return 0
  }

  return -1

}

ma.sortUsingFunction(comp, context:UnsafeMutablePointer<Void>(bitPattern: 0))
var ma=NSMutableArray()
ma.addObject(“Hi”)
ma.添加对象(“Anil”)
func comp(第一个:AnyObject,第二个:AnyObject,上下文:UnsafeMutablePointer)->Int{
设f:String=first as!String
设s:String=secondas!String
如果f>s{
返回1
}
else如果(f==s){
返回0
}
返回-1
}
ma.sortUsingFunction(组件,上下文:UnsafeMutablePointer(位模式:0))

嗯,作为你的参考。注意:我使用的是Xcode 7.1 Swift 2.1。

使用
sortUsingComparator
。它比排序函数更简单。以下是语法:

a.sortUsingComparator {
    let packet1 = $0 as! Packet
    let packet2 = $1 as! Packet
    if packet1.timestamp < packet2.timestamp {
        return .OrderedAscending
    }
    if packet1.timestamp == packet2.timestamp {
        return .OrderedSame
    }
    return .OrderedDescending
}
a.sortUsingComparator{
设packet1=$0为!Packet
让packet2=$1作为!数据包
如果packet1.timestamp
我认为swift comparePacketDates函数的主体缺失。这可能有助于诊断问题。此外,您可以考虑将NStubabLeRead转换为SWIFT数组,并使用SWIFT的排序机制。看这里:我的比较包装的身体不重要,因为它没有走那么远。它不会接受我将其声明为sortUsingFunction中第一个参数的方式。另外,如果我将其铸造到Swift数组中,Swift的排序是否适用于自定义对象数组?或者它只是对字符串和数字数组进行排序?这在使用我的XCode 6.4/Swift 1.2时不起作用。老一套的“不能调用”。也许是我升级的时候了。我敢打赌你的解决方案在Swift 2.1中有效,但我暂时无法测试它,因为我将在2周后升级。我通常不喜欢“用另一种方式做”的答案,但罗布·马约尔的解决方案对我有效,所以我不得不接受他的答案。但是Thx很多。
a.sortUsingComparator {
    let packet1 = $0 as! Packet
    let packet2 = $1 as! Packet
    if packet1.timestamp < packet2.timestamp {
        return .OrderedAscending
    }
    if packet1.timestamp == packet2.timestamp {
        return .OrderedSame
    }
    return .OrderedDescending
}