Как стать автором
Обновить
8
0

Пользователь

Отправить сообщение
Спасибо. Интересный метод. Возьму на вооружение :)
Интересно. А если так?

func test() -> One {
   let value: One = Two()
   return value.copy() //у копии будет тип One или Two?
}
override func copy() -> Two {
     let instance = Two()
     return setup(instance)
}


И вот тут судя по всему должно быть:

override func copy() -> One {
     let instance = Two()
     return setup(instance)
}
Убрал лишние public
В вашем случае сохранить можно не только ссылку, но и значение struct или enum.

Да, разумеется. Но я не стал усложнять код конструкциями вроде class.
По поводу наследования верное замечание. Я тоже сталкивался с проблемой копирования для иерархии классов.
Решение описанное выше можно модернизировать для саб-класса:

public class CopyableSubclass: CopyableClass {
    public var fieldC = [Int]()
    
    public override func copy() -> Self {
        let copy = super.copy() as! CopyableSubclass
        
        copy.fieldC = fieldC
        
       //та самая функция из статьи для каста к Self
        return unsafeCast(copy)
    }
}
В вашем решении вижу

associatedtype V


но не вижу нигде typealias для него, разве что

typealias T = One

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность