gpt4 book ai didi

swift - swift 中的闭包和 withUnsafeBufferPointer()

转载 作者:搜寻专家 更新时间:2023-10-31 22:36:03 25 4
gpt4 key购买 nike

我只是想快速了解闭包。

我想使用数组的 withUnsafeBufferPointer 方法。在最简单的形式中,我可以成功地做这样的事情:

var aa:[UInt8] = [1,2,3,4,5,6,7,8]
var bb = aa.withUnsafeBufferPointer({$0.baseAddress})

我也可以这样做:

var bb = aa.withUnsafeBufferPointer({pointerVal in pointerVal.baseAddress})

但是,我无法在不在 xcode 中生成错误的情况下执行此操作:

var bb = aa.withUnsafeBufferPointer({pointerVal in return pointerVal.baseAddress})

"Cannot convert the expression's type '((ST5)->(ST5)->ST4)->((ST5)->ST4)->ST4' to type 'R'

在前两个赋值中,隐含了return 语句。如果我明确地把它放进去,事情就会失败。我无法将此与 Apple 的文档相协调。 (请参阅 The Swift Programming Language 中关于闭包的章节)。我想在其中放入一个更复杂的闭包,这需要一个 return 语句。我必须做什么才能做到这一点?

最佳答案

除非闭包只包含一个表达式,否则您需要指定参数和返回类型:

var bb = aa.withUnsafeBufferPointer({pointerVal -> UnsafePointer<UInt8> in return pointerVal.baseAddress})

或注释变量以便编译器可以推断类型:

var bb : UnsafePointer<UInt8> = aa.withUnsafeBufferPointer({pointerVal in return pointerVal.baseAddress})

但是你应该只在闭包内部使用指向数组缓冲区的指针。像这样将指针存储在变量中是不安全的,因为数组可能被释放,编译器不知道它是通过 bb 引用的。

关于swift - swift 中的闭包和 withUnsafeBufferPointer(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26760385/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com