let cards = [{
item: {
_id: '5c863cc8ee0819f989acf9c3',
imagePath: 'https://upload.wikimedia.org/wikipedia/en/5/5e/Gothiccover.png',
title: 'Gothic Video',
description: 'Absolutely stunning',
price: 10,
__v: 0,
},
image: 'https://upload.wikimedia.org/wikipedia/en/5/5e/Gothiccover.png',
qty: 1,
price: 10,
id: '5c863cc8ee0819f989acf9c3',
}]
cards.forEach(element => {
delete element.id
})
console.info(cards)
Моя путаница была основана на ошибочном убеждении, что у каждого класса должен быть один назначенный инициализатор. Это не так, и в случае UITableViewController
есть 3 назначенных инициализатора (насколько я могу судить):
initWithStyle:
объявлен локально initWithNibName: bundle:
унаследованный от UIViewController
initWithCoder:
от принятия протокола NSCoding
Вам необходимо переопределить 1 или более из них в вашем подклассе в зависимости от того, как ваш подкласс получает экземпляр. В моем случае мне пришлось реализовать # 2 и # 3, так как класс может быть загружен из NIB или создан с помощью кода со ссылкой на NIB. (Я полагаю, что редко вы будете использовать оба initWithStyle:
и initWithNibName:
Реализовать:
- (void) viewDidLoad
и выполнить инициализацию вашего компонента там.
Преимущество состоит только в том, что инициализация выполняется только когда представление фактически запрашивается.
Или просто создайте отдельный метод настройки, вызываемый всеми инициализаторами.
Внутренне,
-initWithStyle:
вызывает -init
super'а, затем устанавливает _tableViewStyle
ivar. -init
просто вызывает -initWithNibName:bundle:
с аргументами по умолчанию. -initWithNibName:bundle:
. Поэтому, если вы переопределите -initWithNibName:bundle:
, то -initWithStyle:
тоже примет это изменение. Конечно, чтобы перестраховаться (поскольку вы не должны полагаться на детали реализации), переопределите оба варианта.
(И нет необходимости переопределять -initWithCoder:
, если вы не собираетесь разворачивать/архивировать экземпляры)
Чтобы уточнить, initWithStyle:
, будучи единственным опубликованным инициализатором UITableViewController
в документации, является его единственным явно указанным инициализатором.
initWithNibName:bundle:
наследуется от UIViewController и является назначенным инициализатором для этого класса. Поэтому, в соответствии с рекомендациями Cocoa, UITableViewController
должен переопределить этот метод (реализовав его). Однако это не делает его назначенным инициализатором UITableViewController
.
initWithCoder:
, как вы указываете, является неявным назначенным инициализатором из NSCoding
.