在 Swift 中,参数标签(argument label),用于在调用函数时提高代码的可读性。

大家好,我的开源项目PakePlus可以将网页/Vue/React项目打包为桌面/手机应用并且小于5M只需几分钟,官网地址:pakeplus.com

1. 函数签名分析

swift 复制代码
func session(_ session: ARSession, didUpdate frame: ARFrame)
  • func session:方法名

  • _ session: ARSession:第一个参数,_ 表示调用时省略参数标签

  • didUpdate frame: ARFrame:第二个参数,didUpdate 是参数标签,frame 是参数名

2. 调用时的区别

scss 复制代码
// 调用第一个参数(省略标签)
session(someARSession, didUpdate: someARFrame)

// 如果没有 didUpdate 标签,调用会是:
session(someARSession, someARFrame) // 可读性差

3. didUpdate 的含义

  • 字面意思:"已经更新了"

  • 语义作用:表明这个参数代表的是"被更新的帧"

  • 代码可读性:让调用代码读起来像自然语言

4. 类似的例子

swift 复制代码
// 其他常见的参数标签
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange)

总结

didUpdate 是一个参数标签,它的作用是:

  • 提高代码可读性

  • 明确参数的含义(表示这是一个被更新的帧)

  • 遵循 Swift 的 API 设计惯例

在方法内部,你使用参数名 frame 来访问这个值,而在调用时使用 didUpdate 标签来使代码更加清晰

Swift 使用参数标签的设计是为了解决多个问题,而不仅仅是技术必要性。

主要原因:

1. 提高代码可读性

scss 复制代码
// 有标签 - 读起来像自然语言
session(someSession, didUpdate: currentFrame)

// 无标签 - 含义不明确
session(someSession, currentFrame) // 这个 currentFrame 是什么?

2. 区分多个参数

当方法有多个参数时,标签尤为重要:

less 复制代码
// 清晰明确
func calculateArea(of shape: String, width: Double, height: Double)

calculateArea(of: "rectangle", width: 10, height: 5)

// 对比:没有标签会很混乱
calculateArea("rectangle", 10, 5) // 10 和 5 分别代表什么?

3. 遵循 Swift API 设计准则

Swift 鼓励编写"自文档化"的代码:

less 复制代码
// Swift 风格 - 可读性强
x.addSubview(y)
button.setTitle("Hello", for: .normal)

// 对比其他语言 - 可读性较差
x.add(y)
button.setTitle("Hello", .normal)

4. 方法重载时的清晰度

swift 复制代码
func move(to position: CGPoint)
func move(by delta: CGVector)
func move(towards direction: Direction)

// 调用时非常清晰
move(to: targetPosition)
move(by: movementVector) 
move(towards: .north)

在你的具体例子中:

swift 复制代码
// 当前设计:
func session(_ session: ARSession, didUpdate frame: ARFrame)

// 如果去掉标签:
func session(_ session: ARSession, frame: ARFrame)

// 调用时:
session(someSession, frame: someFrame) // 含义不明确 - 是要设置帧?还是帧更新了?

技术上的等价性

实际上,你可以这样写:

swift 复制代码
// 方式1:使用不同标签和参数名
func session(_ session: ARSession, didUpdate frame: ARFrame)

// 方式2:标签和参数名相同
func session(_ session: ARSession, frame: ARFrame)

// 方式3:省略标签(不推荐)
func session(_ session: ARSession, _ frame: ARFrame)

大家好,我是1024小神,技术群 / 私活群 / 股票群 或 交朋友 都可以私信我。 如果你觉得本文有用,一键三连 (点赞、评论、关注),就是对我最大的支持~

相关推荐
岁月宁静38 分钟前
MasterGo AI 实战教程:10分钟生成网页设计图(附案例演示)
前端·aigc·视觉设计
狗头大军之江苏分军1 小时前
快手12·22事故原因的合理猜测
前端·后端
我命由我123451 小时前
CSS 锚点定位 - 锚点定位引入(anchor-name、position-anchor)
开发语言·前端·javascript·css·学习·html·学习方法
哟哟耶耶1 小时前
js-清除首尾空白字符再进行空白匹配str.trim().match(...)
开发语言·前端·javascript
浮游本尊2 小时前
React 18.x 学习计划 - 第十天:React综合实践与项目构建
前端·学习·react.js
阿蔹2 小时前
UI测试自动化--Web--Python_Selenium-元素定位
前端·ui·自动化
万少2 小时前
【鸿蒙心迹】-03-自然壁纸实战教程-项目结构介绍
前端
万少2 小时前
【鸿蒙心迹】- 02-自然壁纸实战教程-AGC 新建项目
前端
南望无一2 小时前
Vite拆包后Chunk级别的循环依赖分析及解决方案
前端·vite
快乐星球喂2 小时前
子组件和父组件之间优雅通信---松耦合
前端·vue.js