Swift中的self class alloc

xfx*_*xfx 4 objective-c ios swift

我有一个用Objective-C编写的Model类,它假设是由子类继承的.有一种方法:

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

子类应该用以下内容覆盖它:

- (id)deepcopy {
    id newModel = [super deepcopy];
    // something else
    return newModel;
}
Run Code Online (Sandbox Code Playgroud)

关键是[[[self class] alloc] init],它将基于实际的类来实例化一个对象.最近我尝试将这个项目升级到Swift,但是找不到在Swift中做同样事情的方法.

我怎样才能做到这一点?

sky*_*489 7

我想你要找的是dynamicType:

func deepcopy() -> Self {
    let newModel = self.dynamicType.init()
    return newModel
}
Run Code Online (Sandbox Code Playgroud)

更新至于Swift 3,这似乎有效:

func deepcopy() -> Self {
    let newModel = type(of: self).init()
    return newModel
}
Run Code Online (Sandbox Code Playgroud)

  • 当试图在`UIViewController`的子类上使用它时,我得到以下错误:`类型'MyViewController.Type'没有成员'init'`知道问题是什么吗?我正在写Swift 3. (3认同)