有这个功能
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
编译器不能区分它是一个变量名,另一个是函数名。
答案 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