スーパークラスのデフォルトのinitメソッドを破棄したい。これはSwiftのfatalError
で簡単に実現できます。
class subClass:NSObject{
private var k:String!
override init(){
fatalError("init() has not been implemented")
}
init(kk:String){
k = kk
}
}
Objective-Cでそれを行うにはどうすればよいですか?
この場合、例外を発生させることができます。
このようなもの。これを参照してください
[NSException raise:@"InitNotImplemented" format:@"Subclasses must implement a valid init method"];
NSObject
's doesNotRecognizeSelector:
メソッド。あなたは書くでしょう:
- (instancetype) init
{
[self doesNotRecognizeSelector:_cmd];
}
どこ _cmd
は、値がメソッドのセレクターであるすべてのメソッドの非表示パラメーターです。
最良の答えは私のものです;-)
実行がFatalErrorに遭遇すると、Xcodeは、FatalErrorが発生した行を表示し、ファイルや行番号などに関する情報をログウィンドウに表示します。
同じ動作が必要な場合は、「assert.h」を含めることにより、標準のOSライブラリで利用可能な「assert」を使用する必要があります。
#include "assert.h"
printf("Assertion false: blah, blah\n");
assert(false);
>>Assertion false: blah, blah
>>Assertion failed: (false), function +[X Y], file /Development/Tests/TestAssert.m, line 32.