我可以将协议作为 Objective-C 中的类变量吗?

发布于 2024-11-17 08:51:28 字数 430 浏览 0 评论 0原文

我是 Objective C 的新手。我正在尝试像使用 Java 中的接口一样使用协议,但我不知道如何使用它,甚至不知道它是否是适合这项工作的工具。我已经在 Protocol.h 中定义了一个协议:

@protocol SomeProtocol
- (void)someMethod;
@end

现在,在另一个类中,我需要一个具有 someMethod 的变量,

#import "Protocol.h"
@interface OtherClass:NSObject {
    SomeProtocol objWithSomeMethod;
}
@end

当然“SomeProtocol objWithSomeMethod”给了我一个错误。那么有没有一种方法可以声明一个对象,无论类型如何,都符合这个协议呢?

I'm new to Objective C. I'm trying to use a protocol as I would an interface in Java, but I don't know how or even if it's the right tool for the job. I have defined a protocol in Protocol.h:

@protocol SomeProtocol
- (void)someMethod;
@end

Now, in another class, I need a variable that has someMethod

#import "Protocol.h"
@interface OtherClass:NSObject {
    SomeProtocol objWithSomeMethod;
}
@end

Of course "SomeProtocol objWithSomeMethod" gives me an error. So is there a way to declare an object that, regardless of type, conforms to this protocol?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

放手` 2024-11-24 08:51:28

是的,使用尖括号。您可以声明一个实例变量以符合这样的协议:

id<SomeProtocol> objWithSomeMethod;

如果您希望它符合多个协议,您可以使用逗号将它们分开,如下所示:

id<SomeProtocol, SomeOtherProtocol> objWithSomeMethod;

您还可以以相同的方式声明变量或参数。

Yes, use the angle brackets. You can declare an instance variable to conform to a protocol like this:

id<SomeProtocol> objWithSomeMethod;

If you want it to conform to more than one protocol, you use commas to separate them like this:

id<SomeProtocol, SomeOtherProtocol> objWithSomeMethod;

You can also declare variables or parameters the same way.

娇柔作态 2024-11-24 08:51:28

尖括号将对象限定为实现协议。在您的示例中,写

#import "Protocol.h"
@interface OtherClass : NSObject {
    id<SomeProtocol> objWithSomeMethod;
}
@end

如果您想声明一个类实现一个接口,您可以使用相同的符号,本质上是:

@interface MyProtocolClass : NSObject <SomeProtocol> {
    // ...
}
@end

Angle brackets qualify objects as implementing protocols. In your example, write

#import "Protocol.h"
@interface OtherClass : NSObject {
    id<SomeProtocol> objWithSomeMethod;
}
@end

If you want to declare that a class implements an interface, you use the same notation, essentially:

@interface MyProtocolClass : NSObject <SomeProtocol> {
    // ...
}
@end
樱花落人离去 2024-11-24 08:51:28

您应该用他的类型声明您的实例变量,然后在 <> 中声明协议列表。最后是变量名称。所以在你的情况下,它将是:

#import "Protocol.h"
@interface OtherClass:NSObject {
    id <SomeProtocol> objWithSomeMethod;
}
@end

You should declare your instance variable with his type, then the list of protocols inside <> and finally the variable name. So in your case, it would be:

#import "Protocol.h"
@interface OtherClass:NSObject {
    id <SomeProtocol> objWithSomeMethod;
}
@end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文