作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我很困惑,因为我在 Swift 4 中创建了一个 MTLBuffer,但我无法使用 didModifyRange 方法。
有趣的是,我仍然可以在 Apple 文档中找到它,并且还没有听说过它被更改了。
为什么会发生错误 Value of type 'MTLBuffer' has no member '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>
.所以要让它工作,只需传递适当的范围对象。
附言Range<Int>
用 min...max
定义方案(例如 0...100
)。
编辑:
一些 Metal
框架签名仅适用于 macOS 11.1,包括 didModifyRange:
,所以如果你尝试在 iOS 上调用它,即使有 import 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 下不会。
关于ios - 类型 'MTLBuffer' 的值没有成员 'didModifyRange',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47918757/
我很困惑,因为我在 Swift 4 中创建了一个 MTLBuffer,但我无法使用 didModifyRange 方法。 有趣的是,我仍然可以在 Apple 文档中找到它,并且还没有听说过它被更改了。
我是一名优秀的程序员,十分优秀!