Ios 目标C:如何在运行时决定实现

Ios 目标C:如何在运行时决定实现,ios,objective-c,Ios,Objective C,我正在开发一个应用程序,我需要解析MSR卡数据以查找特定的用户id类型的号码。对于不同的客户端,解析的细节将有所不同。理想情况下,我希望编写实现相同接口的独立类,并选择在运行时使用哪个类。这也有一个web组件,所以在PHP中,我只是创建了一个接口,然后是一些实现它的不同类,并根据配置值选择要实例化的类。在Objective-C中,正确的方法是什么 我开始使用协议,但不知道如何设置调用代码应该使用的实现。我是否需要导入所有实现类,然后编写一个开关?似乎应该有更简单的方法 谢谢协议方法是一种很好的方

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

我开始使用协议,但不知道如何设置调用代码应该使用的实现。我是否需要导入所有实现类,然后编写一个开关?似乎应该有更简单的方法


谢谢

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

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

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

因此,您可以看到它不需要知道类是什么,只需要它符合协议。

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

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

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

所以您可以看到,它不需要知道类是什么,只需要它符合协议。

这看起来正是我想要做的。我想我只是缺少了工厂类/方法。如果你不介意的话,你能给我一个关于MSRParserHelper可能是什么样子的伪代码吗?它将是一个只有一个public的类-语法如文档所示,但该函数的实现完全取决于你的情况,您将检查
并决定使用其他多个类中的哪一个,然后构造一个并返回它。这看起来正是我想要做的。我想我只是缺少了工厂类/方法。如果你不介意的话,你能给我一个关于MSRParserHelper可能是什么样子的伪代码吗?它将是一个只有一个public的类-语法如文档所示,但该函数的实现完全取决于你的情况,您将检查
并决定使用其他多个类中的哪一个,然后构造一个并返回它。