如何在Swift中使用CFBINARYEAP?

如何在Swift中使用CFBINARYEAP?,swift,core-foundation,Swift,Core Foundation,我搜索了Swift代码中使用CFBinaryHeap的示例,但找不到该示例,因此我将我的示例发布为下面的答案。下面是一个使用CFBinaryHeap存储Swift中的Foo结构的示例,按整数属性排序 struct Foo { var x : Int = 0 } var callbacks = CFBinaryHeapCallBacks() // <Foo> comparator callbacks.compare = { (a,b,unused) in let a

我搜索了Swift代码中使用CFBinaryHeap的示例,但找不到该示例,因此我将我的示例发布为下面的答案。

下面是一个使用CFBinaryHeap存储Swift中的Foo结构的示例,按整数属性排序

struct Foo {
    var x : Int = 0
}

var callbacks = CFBinaryHeapCallBacks()

// <Foo> comparator
callbacks.compare = { (a,b,unused) in
    let afoo : Foo = UnsafePointer<Foo>(a).memory
    let bfoo : Foo = UnsafePointer<Foo>(b).memory

    if ( afoo.x == bfoo.x ) { return CFComparisonResult.CompareEqualTo }
    if ( afoo.x > bfoo.x ) { return CFComparisonResult.CompareGreaterThan }
    return CFComparisonResult.CompareLessThan
}

let callbackPointer = UnsafeMutablePointer<CFBinaryHeapCallBacks>.alloc(1)
callbackPointer.initialize(callbacks)
var bh = CFBinaryHeapCreate(nil, 0, callbackPointer, nil)

var fooPointer : UnsafeMutablePointer<Foo>!
fooPointer = UnsafeMutablePointer<Foo>.alloc(1)
fooPointer.initialize(Foo(x: 42))
CFBinaryHeapAddValue(bh, fooPointer)
fooPointer = UnsafeMutablePointer<Foo>.alloc(1)
fooPointer.initialize(Foo(x: 99))
CFBinaryHeapAddValue(bh, fooPointer)
fooPointer = UnsafeMutablePointer<Foo>.alloc(1)
fooPointer.initialize(Foo(x: 2))
CFBinaryHeapAddValue(bh, fooPointer)

var got = UnsafePointer<Foo>(CFBinaryHeapGetMinimum(bh))
got.memory.x // 2
CFBinaryHeapRemoveMinimumValue(bh)
got = UnsafePointer<Foo>(CFBinaryHeapGetMinimum(bh))
got.memory.x // 42
CFBinaryHeapRemoveMinimumValue(bh)
got = UnsafePointer<Foo>(CFBinaryHeapGetMinimum(bh))
got.memory.x // 99
CFBinaryHeapRemoveMinimumValue(bh)
structfoo{
变量x:Int=0
}
var callbacks=CFBinaryHeapCallBacks()
//比较器
callbacks.compare={(a,b,未使用)在
设afoo:Foo=UnsafePointer(a).memory
设bfoo:Foo=UnsafePointer(b).内存
如果(afoo.x==bfoo.x){返回CFComparisonResult.CompareEqualTo}
如果(afoo.x>bfoo.x){返回CFComparisonResult.CompareGreaterThan}
返回CFComparisonResult.comparilessthan
}
让callbackPointer=unsafemeutablepointer.alloc(1)
callbackPointer.initialize(回调)
var bh=CFBinaryHeapCreate(nil,0,callbackPointer,nil)
var fooPointer:unsafemeutablepointer!
fooPointer=unsafemeutablepointer.alloc(1)
初始化(Foo(x:42))
CFBinaryHeapAddValue(bh,fooPointer)
fooPointer=unsafemeutablepointer.alloc(1)
初始化(Foo(x:99))
CFBinaryHeapAddValue(bh,fooPointer)
fooPointer=unsafemeutablepointer.alloc(1)
初始化(Foo(x:2))
CFBinaryHeapAddValue(bh,fooPointer)
var got=未安全指针(CFBinaryHeapGetMinimum(bh))
got.memory.x//2
CFBinaryHeapRemoveMinimumValue(bh)
got=未安全指针(CFBinaryHeapGetMinimum(bh))
got.memory.x//42
CFBinaryHeapRemoveMinimumValue(bh)
got=未安全指针(CFBinaryHeapGetMinimum(bh))
got.memory.x//99
CFBinaryHeapRemoveMinimumValue(bh)

您从未解除分配内存