【问题标题】:How to create an anonymous class of a protocol in Objective-C如何在 Objective-C 中创建协议的匿名类
【发布时间】:2015-10-13 15:43:37
【问题描述】:

以下代码 sn-p 是用 Java 编写的。我们如何在 Objective C 中获得匿名类实现?

//MyDelegate is an interface

MyDelegate delegate=new MyDelegate() {
@Override
public void onDelegateResponse(int responseType,NSString data)
  {


  }
};

//DFNodesControl is a normal java class
DFNodesControl obj=new DFNodesControl();
obj.makeRequest(delegate,currentNode);

【问题讨论】:

  • 在 obj-C 中,您永远不会覆盖协议的方法,因为在协议中根本没有定义该方法。它只是被声明的。
  • 换句话说(回复:@AnoopVaidya 的评论)ObjC 协议就像一个 Java 接口。如果定义类来实现协议,则需要为所有必需的协议方法提供方法,并且可以选择提供协议声明为可选的方法。
  • 如果您同时了解 Java 和 Objective C,请尝试理解问题并提供解决方案。如果我的问题标题错误,建议进行编辑。降级不是解决方案。
  • 您的@protocol 已经定义了吗?你有什么 Obj-C 代码? (显示)
  • @Wain 是的,我已经创建了我的协议类,并且我还为我的几个类实现了它。但现在我需要在一个方法中执行此操作。请帮助!!

标签: ios objective-c anonymous-class


【解决方案1】:

我想你想使用anonymous classes

Objective-C 目前还没有这个确切的功能。见问题"Objective-C equivalent to Java's anonymous classes in class methods"

不过,您可以在 Objective-C 中创建块。它们像常规函数一样工作,可以传递和重用。在这种情况下,您必须更改界面以将块作为委托而不是对象。或者你使用一个简单的包装类;其中在上述 SO 问题中提供了example for this

详情请见Apple's block programming docs

【讨论】:

  • 嗯,这回答了我的问题。非常感谢 ctietze。
  • 不客气。为防止进一步投票,您可能应该在问题中添加“匿名类”。当您现在陈述问题时,似乎您想了解有关@protocol 的一些信息,这并不完全正确。
【解决方案2】:

在 Objective-C 中,您创建一个实现协议的类,然后实现@protocol 中指定的每个必需方法。

@protocol 没有您可以使用的“默认”实现(因此会覆盖默认实现)。

【讨论】:

  • 感谢您的回复。但是,如果我不想让我的类实现协议,而只是像我的 Java 代码 sn-p 那样创建一个对象,该怎么办
  • 然后你需要创建另一个实现协议的类。 Java 擅长匿名类,Obj-C 不是...
  • 是的,Wain 得到了。谢谢你的时间。以下评论帮助了我。[stackoverflow.com/a/17675006/1258606]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-07
相关资源
最近更新 更多