2015-04-04 51 views
2

任务很简单:我需要创建将所有内容委托给包装对象的包装器。只有包装对象的类型是包含可选方法的协议。我的包装是实现相同的协议。如何使用可选方法包装协议?

我该如何处理可选方法?我可以:

  1. 我可以在我的包装中实现它们。但是,如果它们不是由被封装的对象实现的,我会从这个实现中返回什么?
  2. 不执行它们。在这种情况下,包装对象将不会提供我不想要的包装对象的某些功能。

有没有更好的选择?请注意,我在斯威夫特工作。

+0

我很确定你不能在Swift中这样做,你将需要Obj-C,特别是访问'NSInvocation'。或者只是忽略可选方法,因为无论如何都有Obj-C功能。它们不存在于纯Swift中。 – Sulthan 2015-06-15 11:56:01

+0

我知道[这个答案](http://stackoverflow.com/a/18777565/2792531)是Objective-C,但为了清楚起见,你是否试图在Swift中完成这样的事情? – nhgrif 2015-06-15 11:57:58

回答

0

如果您使用可选方法,您将使用Objective-C运行库。这意味着您可以查询对象是否响应可选方法,更好地解释为here

如果您是Objective-C运行时的新手,可以通过Objective-C Runtime Programming Guide了解更多信息。

我认为包装应该在运行时检查实现,如果缺少,那么应该返回某种指示符,一个布尔可能,一旦调用这些可选方法之一。

+0

当然,我可以检测包装对象是否在运行时实现可选方法。到那时,无论是在包装器中的方法是实现或不......这让我们对你的建议检查在运行时的实现和返回布尔或其他东西。包装器只对客户端可见(与用作包装对象类型的协议相同)。我不能修改这个协议(Cocoa的一部分),所以我不能添加任何东西到包装界面。 – drasto 2015-04-04 23:08:46