我有一个用Objective-C编写的Model类,它想被子类继承。有一种方法:

- (id)deepcopy {
    id newModel = [[[self class] alloc] init];
    newModel.id = self.id;
    // do something
    return newModel;
}

子类应使用以下内容覆盖它:
- (id)deepcopy {
    id newModel = [super deepcopy];
    // something else
    return newModel;
}

关键是 [[[[self class] alloc] init] ,它将根据实际的类实例化一个对象。最近,我尝试将该项目升级到Swift,但是找不到在Swift中执行相同操作的方法。

我怎样才能做到这一点?

最佳答案

我认为您正在寻找的是dynamicType:

func deepcopy() -> Self {
    let newModel = self.dynamicType.init()
    return newModel
}

更新对于Swift 3,这似乎可行:
func deepcopy() -> Self {
    let newModel = type(of: self).init()
    return newModel
}

10-05 18:42