加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ios – “MTLBuffer”类型的值没有成员’didModifyRange’

发布时间:2020-12-14 17:26:12 所属栏目:百科 来源:网络整理
导读:我很困惑,因为我在 Swift 4中创建了一个MTLBuffer但我无法使用方法didModifyRange. 有趣的是,我仍然可以在Apple文档中找到这个并且没有听说过这个被更改. 为什么“MTLBuffer”类型的错误值没有成员’didModifyRange’发生? 以下代码将在最新版本的XCode中生
我很困惑,因为我在 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下.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读