Swift позволяет объявлять имя переменной таким же, как имя параметра или имя функции - PullRequest
0 голосов
/ 04 августа 2020

Я новичок в Swift и не совсем понимаю, как Xcode не выдаст ошибки с кодом ниже

func foo(param: Int)->Int{
  let param: Int = 5
  return param
}
var foo: Int = 5
print(foo)

Как видите, Swift позволяет мне объявлять переменную param с тем же именем с параметром функции. Также мне разрешено объявить переменную с тем же именем, что и имя функции. Может ли кто-нибудь помочь мне объяснить это. Спасибо!

Ответы [ 2 ]

2 голосов
/ 04 августа 2020
  1. foo и foo(param: - разные подписи.

    Однако это не разрешено

    let foo = foo(param: 12)
    

    Вы получаете сообщение об ошибке

    Переменная, используемая в собственном начальном значении

  2. Метки параметров и локальные переменные находятся в разных пространствах имен. Локальная переменная скрывает метку параметра.

    Можно даже объявить член param в структуре. Чтобы обратиться к члену структуры, вы должны добавить self

    struct Foo {
    
        var param = 0
    
        mutating func foo(param: Int) -> Int {
            let param = 10 + param // 15
            self.param = param * 20 // 300
            return param // 15
        }
    }
    
    var f = Foo()
    print(f.foo(param: 5)) // 15
    print(f.param) // 300
    
0 голосов
/ 04 августа 2020

Переменные функции и экземпляра в этом случае представляют собой две разные сущности. Swift не разрешает использовать одинаковые имена функций и переменных, если в функции нет параметра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...