swift - 为什么我需要复制第一个参数的标签才能使其显示在调用中?

标签 swift parameters swift2 naming-conventions function-declaration

我有这两个功能:

func random() -> CGFloat {
    return CGFloat(Float(arc4random()) / 0xFFFFFFFF)
}
            // here
func random(min min: CGFloat, max: CGFloat) -> CGFloat {
    return random() % (max - min) + min
}

为什么我应该在第二个函数中编写两次 min 以便像这样调用它:

random(min: 1, max: 5);

最佳答案

在 Swift 3 之前,这是必要的。声明一个这样的函数:

func foo(bar: Baz)

隐式将其更改为:

func foo(_ bar: Baz)

这将使其被称为这样:

foo(Baz())

所以必须这样声明:

func foo(bar bar: Baz)

为了这样调用它:

foo(bar: Baz())

自 Swift 3 起,不再需要这样做。现在,声明一个这样的函数:

func foo(bar: Baz)

隐式将其更改为:

func foo(bar bar: Baz)

这将使其被称为这样:

foo(bar: Baz())

所以现在必须这样声明:

func foo(_ bar: Baz)

为了这样调用它:

foo(Baz())
<小时/>

为什么?

这个想法是每个非自记录参数必须有一个明确的标签,以便阅读代码的人立即知道发生了什么。对于像 setWidth(5) 这样的简单方法,很明显您将宽度设置为 5,因此第一个参数不需要标签 (setWidth(width: 5) ) 是多余的)。但是,对于像 wait(forSeconds: 5) 这样更细致的方法,如果没有 forSeconds: 标签(wait(5) 很容易被视为 5 毫秒)。

关于swift - 为什么我需要复制第一个参数的标签才能使其显示在调用中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37876268/

相关文章:

swift - 在 Swift 中为 macOS 构建框架时出错

swift - 从枚举数组中删除枚举,无论其参数如何

sql - Excel 2013 power query - 带有动态参数的 SQL 查询

java - java中将方法作为参数传递

ios - 快速读取任意数量位的方法

swift - 在 IBAction 中调用其他函数之前如何完成一个函数?

Swift: 'Abort trap: 6 - pointer being freed was not allocated' 带有类 where 子句

ios - 如何使用 Swift 检测 YTPlayerState.Ended?

ios - 如何使用 Xcode/Swift 创建横跨屏幕的横幅图像?

php - mysqli_stmt_execute() 期望参数 1 为 mysqli_stmt,