Короткий ответ - нет.Длинный ответ: при создании пользовательской структуры вам даже не нужно предоставлять пользовательский инициализатор.Структура предоставит это для вас.Не относится к вашему вопросу, но вы всегда должны объявлять свои свойства как константы.Если вам нужно другое значение, создайте новую структуру со значениями, обновленными из старого экземпляра.Просто создайте «простую» структуру:
struct Person {
let name: String
let age: Int
}
Это обеспечит инициализатор по умолчанию со следующей подписью:
Person.init(name: String, age: Int)
Если вы собираетесь предоставить себе тот же инициализатор для этой структурыэто было бы записано как:
init(name: String, age: Int) {
self.name = name
self.age = age
}
последние мысли
Нет никаких оснований для такой вещи.Вы должны хранить имена инициализаторов, совпадающие с именами свойств, которым они будут назначены.Единственное «преимущество» выбора другого имени - отсутствие необходимости явно вызывать self
внутри инициализатора.
В вашем примере этого будет достаточно
init(firstName: String, ancientness: Int) {
name = firstName
age = ancientness
}
но не по моему
init(name: String, age: Int) {
name = name // Cannot assign to value: 'name' is a 'let' constant
age = age // Cannot assign to value: 'name' is a 'let' constant
}
Действительно практическая причина?
Единственное, что я могуsee отбрасывает self
, что уже можно сделать в 99% случаев при кодировании в Swift.Мне действительно очень нравится использовать теневое копирование, когда это возможно во всех моих ответах.Вы можете увидеть это в этом посте Drop метода экземпляра Swift Array (at: Int) , где локальная переменная index
скрывает метод сбора index<T: Comparable>(_ T, offsetBy: T, limitedBy: T)
.
Или на этом посту Swift: второе вхождение с indexOf классический пример теневого копирования
var startIndex = self.startIndex
Где вы можете обратиться к startIndex
локальной переменной метода или экземпляру коллекциидобавление свойства с собственным префиксом self.startIndex
.