Dal*_*kar 5 closures swift swift3
在嵌套闭包中使用捕获的值的正确语法是什么?
我有以下工作代码用于使用zlib库从整数值计算CRC32 。
func testCrc()
{
var x: UInt32 = 0xffffffff
let result = withUnsafePointer(to: &x, {
$0.withMemoryRebound(to: Bytef.self, capacity: 4) {
crc32(0, $0, 4)
}
})
XCTAssertEqual(0xffffffff, result)
}
Run Code Online (Sandbox Code Playgroud)
我想创建可以从任何值计算CRC32的独立泛型函数。为了做到这一点,除了值本身之外,我还必须计算并传递它的大小,所以我不能使用显式大小-4-就像上面代码中使用的那样。
但是我很难找到正确的语法来将计算的大小传递给内部闭包。
func calculateCrc32<T>(_ crc: UInt, value: inout T) -> UInt
{
let size = MemoryLayout.size(ofValue: value)
let result = withUnsafePointer(to: &value, {
$0.withMemoryRebound(to: Bytef.self, capacity: size) {
crc32(crc, $0, size) // error
}
})
return result
}
Run Code Online (Sandbox Code Playgroud)
上面的代码显示了相当混乱的参数编译器错误$0:
无法将类型“ UnsafeMutablePointer <_>”的值转换为预期的参数类型“ UnsafePointer!”。
令人困惑,因为如果我替换crc32(crc, $0, size)为crc32(crc, $0, 4)编译器,则不会抱怨,并且函数对于4字节大小的值正常工作。
如何解决以上问题?
| 归档时间: |
|
| 查看次数: |
123 次 |
| 最近记录: |