Предположим, у меня есть такой класс:

class Foo {

    private let userId: String

    init(userId givenUserId: String) {
        userId = givenUserId
    }  
}

Когда у меня есть инициализаторы (или функции), подобные приведенному выше, то есть те, которые устанавливают некоторую внутреннюю переменную, мне нравится, чтобы их имя внешнего параметра было настолько информативным, насколько это возможно. С другой стороны, также хорошо использовать то же имя во внутренней реализации класса. Но тогда мне нужно использовать метку локального параметра, и я это делаю, добавляя префикс «данный» перед меткой внешнего параметра. Это хороший способ сделать это или есть лучший метод или соглашение для решения проблемы?

0
pkacprzak 18 Апр 2016 в 15:02

2 ответа

Лучший ответ

В инициализаторах Swift вы можете использовать локальные метки, идентичные именам свойств. С обозначением self. компилятор автоматически определяет, какой из них использовать для простых назначений. Таким образом, вы можете иметь выразительные внешние параметры и избежать бремени определения как внешних, так и внутренних меток параметров.

class Foo {

    private let userId: String

    init(userId: String) {
        self.userId = userId
    }  
}
4
Jean-Baptiste 18 Апр 2016 в 12:15

Чтобы избежать двусмысленности, вы можете написать свой класс так:

class Foo {

    private let userId: String

    init(userId userId: String) {
       self.userId = userId
    }
}

Self ключевое слово, автоматически примет внутреннюю переменную.

Если вам нужна определенная точность в выборе хорошего стиля программирования, я рекомендую вам: swift -стайл-гид

1
Stéphane Garnier 18 Апр 2016 в 12:16