我很困惑,因为我在
Swift 4中创建了一个MTLBuffer但我无法使用方法didModifyRange.
有趣的是,我仍然可以在Apple文档中找到这个并且没有听说过这个被更改.
为什么“MTLBuffer”类型的错误值没有成员’didModifyRange’发生?
以下代码将在最新版本的XCode中生成此错误
let device = MTLCreateSystemDefaultDevice()
var buffer = device?.makeBuffer(length: 3, options: [])
let range = Range<Int>(NSRange())
buffer.didModifyRange(range)
最佳答案 根据
documentation,该方法的签名如下所示:
func didModifyRange(_ range: Range<Int>)
你传递的NSRange明显不同于Swift Range< Int>.因此,为了使其工作,只需传递适当的范围对象.
附:范围<诠释>用最小…最大方案(例如0 … 100)定义.
编辑:
一些Metal框架签名仅在macOS 11.1上可用,包括didModifyRange:,所以如果你试图在iOS上调用它,即使在标题中有导入Metal,也会给你这个错误.
所以下面的代码将在macOS 11.1下编译
import Metal
// ...
guard
let device = MTLCreateSystemDefaultDevice(),
let buffer = device.makeBuffer(length: 3, options: [])
else {
return
}
buffer.didModifyRange(Range<Int>(1...10))
……并且不会,在iOS下.