嵌套withUnsafeBytes调用不可避免吗?

时间:2019-06-17 15:10:08

标签: swift

我在Swift中写了一些代码,用于一种数据处理方法(从Obj-C / C代码中桥接),需要3个UnsafeRawBufferPointer,看起来像这样

    data1.withUnsafeBytes({ (rawDataPtr1) -> Void in
        data2.withUnsafeBytes({ (rawDataPtr2) -> Void in
            data3.withUnsafeBytes({ (rawDataPtr3) -> Void in

                doTheThing(rawDataPtr1, rawDataPtr2, rawDataPtr3)

            })
        })
    })

要在Obj-C或C ++的一行中完成几乎可以完成的工作,这是很多难看的代码。除了所有这些嵌套,还有其他选择吗?

1 个答案:

答案 0 :(得分:0)

  

所有这些嵌套还有其他选择吗?

通常,可能不是。缓冲区指针不安全。因此,对于每个不安全的缓冲区指针,您需要一个受限的上下文,在该上下文中保证它始终可访问。那就是关闭。您有三个这样的指针,因此需要三个这样的上下文,嵌套;这就是闭包的巢。也许您可以指出自己的出路,但这是不值得的。在任何情况下,旁观者都认为“难看”;您的代码对我来说看起来正常且令人愉快。