wj2*_*061 18 overriding subclass objective-c ios swift
我想丢弃超类的默认init方法.我可以fatalError在Swift中轻松实现这一点:
class subClass:NSObject{
private var k:String!
override init(){
fatalError("init() has not been implemented")
}
init(kk:String){
k = kk
}
}
Run Code Online (Sandbox Code Playgroud)
我怎么能在Objective-C中做到这一点?
Shr*_*ada 35
在这种情况下,您可以引发异常:
像这样的东西.请参阅此
[NSException raise:@"InitNotImplemented" format:@"Subclasses must implement a valid init method"];
Run Code Online (Sandbox Code Playgroud)
或者你甚至可以使用assert语句.
[NSException raise:@"InitNotImplemented" format:@"Subclasses must implement a valid init method"];
Run Code Online (Sandbox Code Playgroud)
NSAssert(NO, @"balabala");
Run Code Online (Sandbox Code Playgroud)
或者
- (instancetype)init NS_UNAVAILABLE;
Run Code Online (Sandbox Code Playgroud)
========== 更新 ==========
感谢@Cœur
NSAssert在生产中默认禁用,这与FatalError. NSException更好。
最佳实践是在 .h 中声明:
(instancetype)init __attribute__((unavailable("init() is unavailable")));
Run Code Online (Sandbox Code Playgroud)
那么如果有人调用它,编译器将不会编译。
| 归档时间: |
|
| 查看次数: |
4589 次 |
| 最近记录: |