我有两个类,每个类都有一个使用相同代码的实例方法。
这段代码采用NSString并返回NSArray。
目前,这两个类中重复了相同的代码。
有没有办法单独编写并通过两个类调用它?我试图在NSArray的子类中创建一个方法,但由于NSArray是一个抽象类,因此存在许多问题。有什么建议吗?
谢谢。
答案 0 :(得分:4)
不是子类化NSArray,而是扩展类行为的正确方法是在该类上创建一个类别。
因此,您可以在NSString上创建一个返回数组的类别,在将该类别导入项目后,您可以将其称为NSString的一部分,例如:
NSString *myString = @"Hello";
NSArray *myArray = [myString generateArrayFromString];
您可以在此处找到有关如何创建类别的指南:
答案 1 :(得分:1)
您可以尝试制作NSString类别。此类别将返回该数组。 E.g:
//
// 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];
答案 2 :(得分:0)
从它的声音(将字符串解析为NSArray,引用类的实例字段),您可以使该方法成为类(vs实例)方法并从任一类调用它。
即:
+(NSArray*)parseThisString:(NSString*)theString {
doSomething;
return result;
}
使用[TheNameOfTheClass parseThisString:inputString]
调用。
当然,如果你在课堂实例中摒弃价值观,那么这项工作就无法发挥作用。