ios - 类型 'MTLBuffer' 的值没有成员 'didModifyRange'

标签 ios swift xcode metal

我很困惑,因为我在 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/

相关文章:

ios - 链接器错误 : ld: library not found for -lPods (Trying to build . xcworkspace)

ios - UICollectionViewCell subview 的大小不正确

swift - 如何在 osx swift 中使窗口透明?

objective-c - iOS 新手。预期的表达错误?

iphone - Apple mach-o 链接器错误 ("alignment lost")

ios - 确定使用了哪个共享扩展

ios - 如何隐藏 View 的 subview ( float 操作按钮)以防止点击两个不同的区域

swift - 如何在 swift、Xcode 中以编程方式设置 UIPageViewController 的过渡样式?

ios - SwiftUI ForEach 中的动态绑定(bind)字段

swift - swift 是否具有像 Kotlin 那样的标准(范围)功能?