在“核心音频(Core Audio)”框架中,可以通过使用“UnsafeMutableRawPointer?”将用户数据传递到回调函数中。我在思考如何通过这个“UnsafeMutableRawPointer?”以引用的方式传递结构体。在回调函数内部进行的更改应该在回调函数外部反映出来。
我设置了一个游乐场来测试这个问题:
我设置了一个游乐场来测试这个问题:
struct TestStruct {
var prop1: UInt32
var prop2: Float64
var prop3: Bool
}
func printTestStruct(prefix: String, data: TestStruct) {
print("\(prefix): prop1: \(data.prop1), prop2: \(data.prop2), prop3: \(data.prop3)")
}
func testUnsafeMutablePointer(data: UnsafeMutableRawPointer?) {
var testStructInFunc = data!.load(as: TestStruct.self)
printTestStruct(prefix: "In func (pre change)", data: testStructInFunc)
testStructInFunc.prop1 = 24
testStructInFunc.prop2 = 1.2
testStructInFunc.prop3 = false
printTestStruct(prefix: "In func (post change)", data: testStructInFunc)
}
var testStruct: TestStruct = TestStruct(prop1: 12, prop2: 2.4, prop3: true)
printTestStruct(prefix: "Before call", data: testStruct)
testUnsafeMutablePointer(data: &testStruct)
printTestStruct(prefix: "After call", data: testStruct)
可悲的是,似乎在testUnsafeMutablePointer
函数中对testStruct
所做的任何更改都会在函数调用后丢失。
我以为UnsafeMutableRawPointer
在这里的行为类似于按引用传递?我错过了什么吗?
class
,但我对__Swift__还很陌生)? - user6105890