Это частное хранимое имущество с открытым вычисляемым только для объекта значением является шаблоном, предназначенным для того, чтобы сделать переменную общедоступной, но сохраняя частную сеттер. Более краткий путь достижения этого было бы определить частный сеттер для хранимого имущества, устраняя необходимость в этих вычисленных свойствах:
class Person {
private(set) var firstname: String!
private(set) var lastname: String!
var fullname: String {
return "\(firstname ?? "") \(lastname ?? "")"
}
}
Обратите внимание, если вы определили их, чтобы быть неявно развернутыми, то ваш fullname
вычисленное свойство может захотеть безопасно развернуть их, как описано выше.
Или, если имена не могут изменить, вы можете определить их константы, которые не были установлены инициализатором и не изменяли снова:
struct Person {
let firstname: String!
let lastname: String!
var fullname: String {
return "\(firstname ?? "") \(lastname ?? "")"
}
}
совершенно не связаны, я не уверен, что я в этой ситуации советуют неявно обернутые опционы. Цель неявно развернутых опций - это свойства, которые не могут быть установлены в инициализаторе, но после их установки они никогда не будут nil
.
Часто при работе с контактами вы должны рассмотреть ситуацию, когда они могут быть nil
. В этом случае я бы не сделал их неявно развернутыми опциями (например, я мог бы использовать ?
, а не !
). Или, если они не могут быть nil
, я бы поставил их в инициализаторе, а затем не сделал их необязательными. Все зависит от бизнес-правил, которые вы собираетесь использовать с этим определением. Я собираюсь предположить, что у вас есть веская причина сделать эти неявно развернутые варианты, но для будущих читателей я бы только предупредил, что следует опасаться использовать неявно развернутые опции слишком случайно.