【问题标题】:Global and local argument names in renderer(_:didAdd:for:) methodrenderer(_:didAdd:for:) 方法中的全局和局部参数名称
【发布时间】:2023-09-23 08:54:01
【问题描述】:

我们总是在 SceneKit 方法中使用本地参数名称(nodeanchor),例如:

optional func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor)

在什么情况下可以使用全局参数名称​​didAddfor

【问题讨论】:

  • didAdd 和 for 不是参数。它们是使函数名称更具表现力的标签。
  • 对不起@EmilioPelaez,但为什么他们不是didAddNodeforAnchor 呢?它更具表现力,不是吗?
  • 因为你已经有了“node”和“anchor”作为参数名。

标签: objective-c swift scenekit arkit


【解决方案1】:

此模式遵循Swift API Design Guidelines:

可能需要更多的词来阐明意图或消除歧义,但那些与读者已经掌握的信息多余的词应该省略。特别是,省略仅重复类型信息的单词。

虽然 Objective-C API 是:

- (void)renderer:(id<SCNSceneRenderer>)renderer 
      didAddNode:(SCNNode *)node 
       forAnchor:(ARAnchor *)anchor;

它被翻译成 Swift 为:

optional func renderer(_ renderer: SCNSceneRenderer, 
                didAdd node: SCNNode, 
                   for anchor: ARAnchor)

大概调用者知道参数的类型,所以类型信息被省略了。

这也是 Objective-C 方法自动翻译成 Swift 的方式;见Name Translation from C to SwiftOmit-needless-words

【讨论】: