Swift: ссылки на массивы как свойства объекта?

У меня есть UITableViewControllerвозможность отображать контент из любого из трех разных таблиц. В Objective-C то, что я обычно делал, это установить свойство на том, TableVCчто является ссылкой на отображаемый TableVC. Тогда inoutбыло бы не только показать содержимое этого массива, но и обрабатывать редактируемые пользователем массивы, скажем, если они удалили или переупорядочили элементы.

То, как он работает в Swift, когда я устанавливаю свойство в моем Arrayмассиве, заключается в том, что это копия массива моей модели, а не ссылка. И хотя это хорошо в определенных контекстах, в моем приложении это кажется плохим по двум причинам: 1) мои массивы огромны, тысячи элементов и копирование огромных массивов снова и снова кажутся расточительными; 2) небольшие изменения сложнее обрабатывать: мне нужно вернуться к модели о удалении элемента или повторном заказе и убедиться, что мои представления и модели массивов остаются в синхронизации.

То, что я хочу сделать, - это свойство, которое является ссылкой на массив , но NSArrayв Swift нет свойства объекта.

Каков правильный способ справиться с этим?

Благодарю.

arrays,swift,

0

Ответов: 1


1 принят

Swift Arrays на самом деле не копируются каждый раз, когда вы их назначаете; вместо этого они копируются на запись . Это означает, что массив копируется только тогда, когда что-то его мутирует; до этого момента вы копируете только ссылку, например, с Objective-C.

С учетом сказанного, если вам нужна эталонная семантика, Arrayкласс из Objective-C по-прежнему доступен в Swift. Вы также можете создать свой собственный classтип, который обертывает, Arrayесли вы не хотите использовать мост Objective-C.

массивы, стремительные,
Похожие вопросы