对于对象实例,我们可以让它们的类声明一些协议一致性,如:
@protocol P <NSObject>
- (void) someMethod ;
@end
@interface C : NSObject <P>
@end
@implementation C
- (void) someMethod {
}
@end
Run Code Online (Sandbox Code Playgroud)
那课怎么样?
我发现自己处于这种情况:
...
Class c = [self modelClass:kind] ;
if (c) {
model = [c performSelector: @selector(decode:)
withObject: [SExpIO read: [fm contentsAtPath:target]]] ;
}
Run Code Online (Sandbox Code Playgroud)
我希望有一种方法可以让我声明存在类方法协议之类的东西.
在上面的例子中,c的所有类都可以是一个类实例(Hmmm ??),声明
+ (id) decode: (SExp *) root ;
Run Code Online (Sandbox Code Playgroud)
有没有办法可以将上述内容转换为:
if (c) {
model = [c decode: [SExpIO read: [fm contentsAtPath:target]]]
}
Run Code Online (Sandbox Code Playgroud)
通过使用合适的"类协议"声明?
协议只是方法声明的列表.它们可以是类方法或实例方法.例:
@protocol MyProtocol
+ (id) aClassMethod;
+ (void) someOtherClassMethod;
- (void) someInstanceMethod;
@end
Run Code Online (Sandbox Code Playgroud)
有有这样的事情协议类的方法,以及他们是所谓的....协议.例如,看起来您需要一个如下所示的协议:
@protocol MyDecoder
+ (id)decode:(SExp *)root;
@end
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样使用它:
Class c = [self modelClass:kind];
if ([c conformsToProtocol:@protocol(MyDecoder)]) {
model = [c decode: [SExpIO read: [fm contentsAtPath:target]]];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
691 次 |
| 最近记录: |