Objective-C:如何在运行时决定实现

时间:2016-10-03 17:35:40

标签: ios objective-c

我在应用程序上工作,我需要解析MSR卡数据以查找特定用户ID类型的数字。对于不同的客户端,解析的细节将有所不同。理想情况下,我想编写实现相同接口的单独类,并选择在运行时使用哪个接口。这也是一个Web组件,所以在PHP中我只创建了一个接口,然后是一些实现它的不同类,并根据配置值选择实例化哪一个。什么是在Objective-C中做到这一点的正确方法?

我使用协议开始了这条路径,但无法弄清楚如何设置调用代码应该使用的实现。我是否需要导入所有实现类然后编写一个开关?似乎应该有一个更简单的方法。

由于

1 个答案:

答案 0 :(得分:2)

协议方法很好。您可以在协议中定义接口,然后使用不同的具体类来实现它。然后你有一个静态方法来决定使用哪个并返回它,但调用者不知道具体的类型,只是它实现你的协议,因为返回类型是协议。

这样,决定使用哪个类的所有逻辑,以及不同具体类的所有知识都封装在这个单一工厂方法中,调用代码只是说:

// MSRParser is the protocol defining the interface.
// MSRParserHelper is a class with a class method (+)
MSRParser parser = [MSRParserHelper parserForCard:aCard];
[parser doParserThings];

所以你看,它不需要知道这个类是什么,只是它符合协议。