Я читал все Swift book и смотрел все WWDC videos (все, что я от всей души рекомендую). Одна вещь, о которой я беспокоюсь, - это инкапсуляция данных.Инкапсуляция данных в Swift
Рассмотрим следующий (полностью надуманный) пример:
class Stack<T>
{
var items : T[] = []
func push(newItem: T) {
items.insert(newItem, atIndex: 0)
}
func pop() -> T? {
if items.count == 0 {
return nil;
}
return items.removeAtIndex(0);
}
}
Этот класс реализует стек, и реализует его с помощью массива. Проблема заключается в том, что items
(как и все свойства в Swift) является общедоступным, поэтому ничто не мешает кому-либо напрямую обращаться (или даже мутировать) от него отдельно от публичного API. Как курящий старый парень на С ++, это делает меня очень сердитым.
Я вижу, как люди сожалеют об отсутствии модификаторов доступа, и, хотя я согласен, что они будут непосредственно решать проблему (и я слышу слухи о том, что они могут быть реализованы в ближайшее время), интересно, какие некоторые стратегии для скрытия данных будут в их отсутствие.
Я что-то пропустил, или это просто упущение на этом языке?
Возможный дубликат: http://stackoverflow.com/q/24003918/1639670 – nathan
Существует фактическая половина пути для выполнения каких-либо сортировки данных - протоколов. Просто сделайте свой класс совместимым с вашим протоколом со всеми функциями и вещами, которые вы хотите видеть во внешнем мире, и передайте его вместо самого класса. Как я уже сказал, это не замена, но будет работать до тех пор, пока модификаторы видимости не исчезнут. Кроме того, это хороший шаблон проектирования - инъекция зависимостей –
, поэтому ничто не мешает кому-либо напрямую обращаться (или даже мутировать) от него отдельно от публичного API », - кроме того, что он был« скверно-старым парнем C++ »:-) какой у вас вред Думаете, произойдет, если вы не будете насильственно запрещать людям использовать ваш код так, как они хотят? У Python, например, есть высказывание «Мы все взрослые здесь». Публичная/частная основана на документации и конвенции. Если кто-то хочет возиться с чем-то внутренним в классе, предостерегайте emptor. Никто не притворяется, что они могут знать всю вечность, что никто никогда не будет иметь достаточных оснований для доступа к внутреннему объекту. – alcalde