1

通常、次のようにクラスのインスタンスを作成します。

親クラス:

@interface baseClass  
+ (instancetype)task;  
@end  
@implement baseClass  
+ (instancetype)task {  
    return [[[self class] alloc] init];  
}  
@end  

そして、子供のクラスで:

@interface childClass : baseClass  
@end  
@implement childClass  
@end  

最後に、次を使用してインスタンスを作成できます。

childClass *pChild = [childClass task];

Swift プログラミング言語を使用してこの機能を実装するにはどうすればよいですか?

言い換えれば、どうすれば[[[self class] alloc] init]迅速に実装できますか?

4

4 に答える 4

0

AClass がサブクラスでない場合NSObject

class AClass {
    required init() {

    }
    class func task() -> Self {
        return self.init()
    }
}

class BClass : AClass {

}

let x = BClass.task()

から継承されたサブクラスまたは他のクラスが必要な場合は、サブクラスが使用できることを確認する必要があるため、キーワードを実装init()して追加する必要があります。requiredBClassAClasstaskinit()

finalそれ以外の場合は、キーワードを追加する必要があります:

final class AClass {
    init() {

    }
    class func task() -> Self {
        return self.init()
    }
}

しかし、私はあなたがそれを必要としないと思います。

AClass が から継承されている場合は、オーバーライドして追加NSObjectする必要があります。init()required

class AClass : NSObject {
    required override init() {

    }
    class func task() -> Self {
        return self.init()
    }
}

class BClass : AClass {

}
于 2016-06-29T09:41:34.330 に答える
-1
class var sharedInstance :CommonUtil {
    struct Singleton {
        static let instance = CommonUtil()
    }

    return Singleton.instance
}
于 2016-06-29T08:32:34.093 に答える