По поводу наследования верное замечание. Я тоже сталкивался с проблемой копирования для иерархии классов.
Решение описанное выше можно модернизировать для саб-класса:
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)
}
}
И вот тут судя по всему должно быть:
Да, разумеется. Но я не стал усложнять код конструкциями вроде class.
Решение описанное выше можно модернизировать для саб-класса:
но не вижу нигде typealias для него, разве что