Помещение:Являются ли инкапсулирующие классы рефлексивными Swift 3 парадигмами?
- В идеале, манера, в которой один программа на языке должна стараться соответствовать парадигмам, к которому язык приписывая.
- В Swift эти парадигмы - это, в первую очередь, ориентированное на протокол программирование и вторичное функциональное программирование.
- В целях совместимости и совместимости Swift также поддерживает объектно-ориентированное программирование.
- Типы ссылок (классы) являются идиоматическими для ООП, тогда как типы значений (структуры, перечисления, примитивы) в сочетании с протоколами являются идиоматическими для POP.
Заключение: когда это возможно, следует использовать типы значений и протоколы и возвращаться к классам только тогда, когда это совершенно необходимо.
Запрос: Какова же роль класса, содержащего типы значений? Связаны ли эти инкапсулирующие классы с парадигмами Swift, или же они сдерживают ООП?
Базовый вариант: Является ли следующая хорошая или плохая практика в Swift:
struct Attribute {
let name: String
var value: Int
}
final class AttributeManager {
var attributes: [Attribute] = []
func add(attribute: Attribute) { self.attributes.append(attribute) }
}
Это может быть просто, что я только действительно знакомы с ООП, но от того, что я могу сказать, не существует на самом деле функционал/общий способ сделать то, что я хочу: Есть список пар Int String, которые могут быть добавлены и удалены из него, и могут сохранять эти значения в UserDefaults, а затем извлекать их. –
Я понимаю ваши замечания о том, что Swift в первую очередь является OOP, но затем возникает вопрос: каковы различия в шаблонах дизайна, которые, как говорят, Swift? –
Во-первых, если вы знаете один способ решения проблемы, это хорошо. Вы решили проблему. Это не значит, что вам нужно остановиться в этот момент, но вы также можете. Когда вы знаете два или более способов решения проблемы, вы должны увидеть, какой из них лучше подходит и имеет наименьшие лазейки. Ваш код в порядке. –