Я понимаю, как структуры и классы (и протоколы) работают на базовом уровне. У меня довольно распространенная ситуация:Подкласс a Struct или аналогичный
Мне нужно иметь общие типы значений с операторами, которые действительно должны копировать при назначении. Эти типы имеют сложную структуру, и я хотел бы специализироваться на подклассификации, иначе будет скопирован код везде, и это будет плохое программирование.
Я пробовал протоколы и расширения, но тогда, поскольку протокол не был общим, мне не удалось определить (общие) операторы, которые я хотел. Если я использую классы, я не буду копировать их при назначении.
Сегодняшний пример: у меня есть матрица, а SquareMatrix - с помощью определенных квадратных матричных функций. Есть операторы, и матрицы могут быть заполнены любым, что соответствует моему кольцевому протоколу. Я попытался определить почти все функциональные возможности протокола с ассоциированным типом и расширение.
Редактировать: Мне действительно интересно, что я должен кодировать. В матричной ситуации мне нужно иметь возможность передавать квадратную матрицу как любую другую, поэтому подкласс является единственным вариантом? Возможно, я ошибаюсь. Основная проблема заключается в том, когда я должен написать функцию, которая говорит о внутренних значениях, мне нужно знать аргумент generic type, чтобы сделать что-нибудь полезное. Например, при определении добавления я должен создать новую матрицу и объявить ее общий тип, но где я получу это, когда я знаю только что-то (неродственный) протокол - это реальный тип является общим, но, несмотря на протокол, связанный с этим типа, у меня нет способа получить это.
Решение благодаря Александру Момльову. Необходимо существенно больше работы, чтобы полностью перевести код в расширение протокола и использовать «Я» для всех соответствующих типов. В расширении компилятор был доволен тем, какими были общие типы.
Код был закрыт, я сожалею, что не смог вставить его во время этого вопроса. Благодарим за терпение и помощь.
Почтовый код, что вы пробовали и какова фактическая проблема. – shallowThought