То, что вы пытаетесь сделать, на самом деле означает, что в вашем дизайне есть изъян.
Если вам нужна функциональность для вызова student.addModuleId(moduleId)
, это означает, что Student
не должен содержать массивModuleRef
.(Или, по крайней мере, есть механизм для извлечения всего ModuleRef
по его идентификатору, а затем вставьте это ModuleRef
в массив).
При этом, после выяснения вашего дизайна, к которому он будет:modules: [ModuleRef]
или moduleIds: [String]
, есть еще кое-что, что вы можете использовать из:
Equatable
протокола.Если вы заставите ModuleRef
соответствовать протоколу Equatable
и проверить его равенство с помощью id
, то Swift предоставит вам доступ к методу remove(element:_)
, и вам больше не нужен метод removeModuleId()
.
Или, если все ModuleId
уникальны, вы можете также реализовать протокол Hashable
и использовать Set<ModuleRef>
вместо массива, чтобы O (1) удалял и вставлял методы.(прямо сейчас, удалить функцию, занимает O (n) время)