Классы

class ShapeNSCopying {
    var lineCount: Int = 0
    var name: String = ""

    init (_ lineCount: Int, _ name: String) {
        self.lineCount = lineCount
        self.name = name
    }

    public func copy(with zone: NSZone? = nil) -> Any {
        return Shape(lineCount, name)
    }
}

let square = Shape(4"Square")
let squareCopy = square.copy() asShape

print("lineCount is \(squareCopy.lineCount)")
print("name is \(squareCopy.name)")