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