变量名称与函数名称冲突会导致"Variable used within its own initial value"



具有此功能

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")

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

更新:

更准确地说 - 我知道编译器在为变量和函数提供相同名称时遇到问题,但我很好奇为什么它不能区分一个是变量名,另一个是函数名。

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

您可以使用

date = self.date(...)

以明确意图。

您的函数被称为 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

相关内容

最新更新