繁体   English   中英

ObjC:有没有“类协议”这样的东西?

[英]ObjC: is there such a thing as a “class protocol”?

对于对象实例,我们可以让它们的类声明一些协议一致性,如:

@protocol P <NSObject>
- (void) someMethod ;
@end

@interface C : NSObject <P>
@end

@implementation C
- (void) someMethod {

}
@end

那课怎么样?

我发现自己处于这种情况:

...
Class c = [self modelClass:kind] ;
if (c) {
    model = [c performSelector: @selector(decode:) 
                    withObject: [SExpIO read: [fm contentsAtPath:target]]] ;
}

我希望有一种方法可以让我声明存在类方法协议之类的东西。

在上面的例子中,c的所有类都可以是一个类实例(Hmmm ??),声明

+ (id) decode: (SExp *) root ;

有没有办法可以将上述内容转换为:

if (c) {
    model = [c decode: [SExpIO read: [fm contentsAtPath:target]]]
}

通过使用合适的“类协议”声明?

协议只是方法声明的列表。 它们可以是类方法或实例方法。 例:

@protocol MyProtocol

+ (id) aClassMethod;
+ (void) someOtherClassMethod;
- (void) someInstanceMethod;

@end

这样的事情协议类的方法,以及他们是所谓的....协议。 例如,看起来您需要一个如下所示的协议:

@protocol MyDecoder
+ (id)decode:(SExp *)root;
@end

然后你可以像这样使用它:

Class c = [self modelClass:kind];
if ([c conformsToProtocol:@protocol(MyDecoder)]) {
     model = [c decode: [SExpIO read: [fm contentsAtPath:target]]];
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM