与函数名称冲突的变量名称导致“变量在其自己的初始值中使用”

时间:2017-10-31 19:47:42

标签: ios swift compilation

有这个功能

private func date(from string: String) {
    // Do thing with string
}

调用它时
let date = date(from: "11:30")

它会产生以下错误

Variable used within its own initial value

显然将代码更改为

let anythingButDate = date(from: "11:30")

会使错误消失,但我试图理解为什么变量名和方法名之间存在冲突。

更新

更确切地说 - 我理解编译器在给出变量和示例代码中的函数同名时遇到了问题,但我很好奇为什么Swift编译器不能区分它是一个变量名,另一个是函数名。

2 个答案:

答案 0 :(得分:5)

函数和变量之间没有很大的区别,因为即使变量也可以包含函数或闭包。你所拥有的是标识符冲突。

您可以使用

date = self.date(...)

明确意图。

答案 1 :(得分:1)

您的函数被称为date,即使它有一个参数,如果您尝试在这种情况下调用同名的变量date,它也会发生冲突。发生的事情是编译器尝试使用声明的常量date来分配它自己的初始值。

当你使用anythingButDate时,那很好,因为你的函数没有被调用,你没有任何其他函数叫anythingButDate

let date = date(from: "11:30") // will not work
let datex = date(from: "11:30") // will work
let anythingButDate = date(from: "11:30") // will work