在Obj-C中的另一个接口的实现中实现一个类别

时间:2011-05-10 14:42:38

标签: objective-c inheritance

我在Obj-C中有一个名为RouteManager的自定义类,它包含一个NSStrings数组。每个字符串都是一个公共汽车站名称,用作字典的键,以获取公交车站的其余信息(基本上只有[busStopDictionary allkeys])。在我的应用程序使用此数组的一种情况下,我想返回按用户距离排序的数组。我已经开始设置代码,以便能够使用以下方法在我的数组上调用sortedArrayUsingSelector:

- (NSComparisonResult)compareByDistance:(NSString*) otherStop
{
    // Return appropriate NSOrdered enum here based on comparison of
    // self and otherStop
}

我的问题是,在compareByDistance是RouteManager的方法的情况下,self指的是RouteManager的实例。但是,我需要self来引用要调用compare的NSString。所以,我认为我需要设置一个类别,如下:

@interface NSString (Support)
-(NSComparisonResult) compareByDistance:(NSString*)otherStop;
@end

这使我的自引用正确,但是此比较使用RouteManager类中的值。如上所述实现时,NSString(支持)实现显然会抱怨这些值未声明。

这应该为我的问题提供足够的背景信息。我该怎么做呢?我希望我的NSString类别(仅由方法compareByDistance组成)能够使用来自我的类​​的当前实例的值,RouteManager,它继承自NSObject。理想情况下,我觉得该类别应该以某种方式在RouteManager中。我觉得有必要通过某种方式来实现这一点,而不是将必要的值传递给compareByDistance。提前感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:2)

最好的办法是为公交车站定义一个自定义类,而不是将它们存储为字符串和字典。

使BusStop类具有Name,Location和其他任何属性。在BusStop类上实现compareByDistance:方法。

如果您需要按名称查找字典,仍然可以使用字典。只需将名称作为字典的键存储,将BusStop对象作为字典的值存储。