如果重新定义方法参数,为什么不是编译错误?

时间:2017-06-01 20:23:36

标签: swift compiler-errors

我的代码中有一个错误,结果发现我在方法的代码中重新定义了一个方法参数而没有意识到这一点。我希望编译器出错,但我没有得到:

func someMethod(parameter:Int)
{
 let parameter = 10 //Why does this not result in error?
}

我知道你可以parameter = 10,但我不明白为什么let parameter = 10有效。

这种行为有充分的理由吗?

1 个答案:

答案 0 :(得分:1)

我想到的主要原因是它允许if letguard let按照它的方式工作,但此功能在许多不同情况下都很有用。

在某些方面,这不是理想的,可能会导致错误,但至少有一致的规则适用,您可以习惯:

  

可以重新定义在当前范围之外定义的变量名称(即{})。

这适用于类/结构方法,以及闭包,内部函数等。

这是不起作用的原因:

func testFunc(test: String) {
    var test: Int? = 2
    guard let test = test else {
        return
    }
}

但这样做:

func testFunc(test: String) {
    var test: Int? = 2
    if let test = test  {
        return
    }
}