从两个类访问同一段代码
Posted
技术标签:
【中文标题】从两个类访问同一段代码【英文标题】:Accessing same piece of code from two classes 【发布时间】:2013-09-19 11:23:17 【问题描述】:我有两个类,每个类都有一个使用相同代码的实例方法。
这段代码接受一个 NSString 并返回一个 NSArray。
目前同一段代码在两个类中重复。
有没有办法分开写,两个类调用呢?我试图在 NSArray 的子类中创建一个方法,但是由于 NSArray 是一个抽象类,因此存在很多问题。有什么建议吗?
谢谢。
【问题讨论】:
【参考方案1】:扩展类行为的正确方法是在该类上创建一个类别,而不是继承 NSArray。
因此,您可以在 NSString 上创建一个返回数组的类别,然后将该类别导入项目后,您可以将其作为 NSString 的一部分来调用,例如:
NSString *myString = @"Hello";
NSArray *myArray = [myString generateArrayFromString];
您可以在此处找到有关如何创建类别的指南:
Customizing Existing Classes
【讨论】:
不要在这样的方法名中使用get
,它在Cocoa的上下文中有更具体的含义。如果您将方法命名为get
,通常意味着调用者负责提供缓冲区以get 输出。例如,请参阅NSArray
中的getObjects:range:
和NSString
中的getCharacters:range:
,以及NSStream
中的getStreamsToHost:port:inputStream:outputStream:
。【参考方案2】:
您可以尝试创建一个 NSString 类别。此类别将返回数组。 例如:
//
// NSString+MyCategory.h
#import
@interface NSString (MyCategory)
-(NSArray *)myMethod;
@end
//
// NSString+MyCategory.m
#import "NSString+MyCategory.h"
@implementation NSString (MyCategory)
-(NSArray *)myMethod
NSArray *_arr = [self componentsSeparatedByString:@","];
return _arr;
@end
然后在您的班级(或您的代码中的任何内容)中,您可以导入类别:
#import "NSString+MyCategory.h"
然后在任何字符串上使用它:
NSArray *myArray = [anyString myMethod];
【讨论】:
【参考方案3】:从它的声音来看(将字符串解析为 NSArray,并引用类的实例字段),您可以将该方法设为类(与实例)方法并从任一类调用它。
即:
+(NSArray*)parseThisString:(NSString*)theString
doSomething;
return result;
使用[TheNameOfTheClass parseThisString:inputString]
调用。
当然,如果您在类的实例中尊重值,这将不起作用。
【讨论】:
以上是关于从两个类访问同一段代码的主要内容,如果未能解决你的问题,请参考以下文章