首页 > 解决方案 > 嵌套 withUnsafeBytes 调用不可避免?

问题描述

我在 Swift 中为需要 3 秒的数据操作方法(从 Obj-C / C 代码桥接)编写了一些代码,UnsafeRawBufferPointer它看起来像这样

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

                doTheThing(rawDataPtr1, rawDataPtr2, rawDataPtr3)

            })
        })
    })

在 Obj-C 或 C++ 中,你可以用一行代码完成很多难看的代码。所有这些嵌套有什么替代方法吗?

标签: swift

解决方案


所有这些嵌套有什么替代方法吗?

一般来说,可能不会。缓冲区指针不安全。因此,对于每个不安全的缓冲区指针,您都需要一个受限的上下文,以保证它可以保持可访问性。这就是闭包。你有三个这样的指针,所以你需要三个这样的上下文,嵌套;这就是闭包的巢。也许你可以写出你的出路,但这不值得付出努力。无论如何,“难看”在旁观者的脑海中;你的代码对我来说看起来很正常和愉快。


推荐阅读