【问题标题】:Swift to swift 2 guard let斯威夫特到斯威夫特 2 后卫让
【发布时间】:2015-12-07 00:08:35
【问题描述】:
let renderEncoderOpt = commandBuffer.renderCommandEncoderWithDescriptor(renderPassDescriptor)

if let renderEncoder = renderEncoderOpt {
  renderEncoder.setRenderPipelineState(pipelineState)
  renderEncoder.setVertexBuffer(vertexBuffer, offset: 0, atIndex: 0)
  renderEncoder.drawPrimitives(.Triangle, vertexStart: 0, vertexCount: 3, instanceCount: 1)
  renderEncoder.endEncoding()
}

上面的代码抛出一个

 Initializer for conditional binding must have Optional type, not 'MTLRenderCommandEncoder'

如果我尝试将 renderEncoderOpt 设为可选,问题仍然存在。我已经尝试使用guard let 与if let 进行测试,并尝试将其设置为可选项,并重新声明类型等,但它一直回到这个问题。这在 swift 1/1.2 中运行良好

有人指点一下吗?

【问题讨论】:

标签: swift


【解决方案1】:

renderCommandEncoderWithDescriptor 没有返回可选项,因此您应该完全移除 if let 条件绑定,直接使用结果。

let renderEncoder = commandBuffer.renderCommandEncoderWithDescriptor(renderPassDescriptor)

renderEncoder.setRenderPipelineState(pipelineState)
renderEncoder.setVertexBuffer(vertexBuffer, offset: 0, atIndex: 0)
renderEncoder.drawPrimitives(.Triangle, vertexStart: 0, vertexCount: 3, instanceCount: 1)
renderEncoder.endEncoding()

【讨论】:

  • 谢谢!我实际上最终想通了,但这就是我做到的。谢谢!
【解决方案2】:

Rob 在 cmets 中回答了这个问题。如果对象不是可选的,则不能使用 if let 语法。这个错误告诉你。

【讨论】:

    【解决方案3】:

    函数renderCommandEncoderWithDescriptor定义如下

    func renderCommandEncoderWithDescriptor(_ renderPassDescriptor: MTLRenderPassDescriptor) -> MTLRenderCommandEncoder
    

    (来源:https://developer.apple.com/library/prerelease/ios/documentation/Metal/Reference/MTLCommandBuffer_Ref/index.html#//apple_ref/occ/intfm/MTLCommandBuffer/renderCommandEncoderWithDescriptor:)

    返回类型MTLRenderCommandEncoder是一个图形渲染命令编码器对象,是一个非可选对象。 (来源:https://developer.apple.com/library/prerelease/ios/documentation/Metal/Reference/MTLRenderCommandEncoder_Ref/index.html#//apple_ref/swift/intf/c:objc(pl)MTLRenderCommandEncoder)

    因此,你的 if let 条件绑定

    if let renderEncoder = renderEncoderOpt {
    

    失败。只需删除此 if 语句,您的代码就可以工作了。

    【讨论】:

      猜你喜欢
      • 2017-03-24
      • 2017-07-22
      • 2017-02-15
      • 2016-02-08
      • 2017-11-13
      • 2015-08-19
      • 2014-09-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多