使用WSDL2ObjC我得到很多类,它们是NSString的子类。 我发现初始化这些类的任何对象的NSString值很麻烦。
说我的课看起来像这样:
@interface mClass ; NSString {
int value;
}
现在在我的代码中我想使用mClass的对象作为NSString,并且还想使用它的整数属性值。
我该怎么做?
我正在尝试使用这样的代码
mClass *obj = [[mClass alloc] initWithString:@"Hello"];
但它告诉我一个错误,说我正在使用类的抽象对象,我应该使用具体的实例。
答案 0 :(得分:6)
如果你真的需要创建NSString子类,你应该覆盖3个方法:
- (instancetype)initWithCharactersNoCopy:(unichar *)characters length:(NSUInteger)length freeWhenDone:(BOOL)freeBuffer;
- (NSUInteger)length;
- (unichar)characterAtIndex:(NSUInteger)index;
例如:
MyString.h
@interface MyString : NSString
@property (nonatomic, strong) id myProperty;
@end
MyString.m
@interface MyString ()
@property (nonatomic, strong) NSString *stringHolder;
@end
@implemenation MyString
- (instancetype)initWithCharactersNoCopy:(unichar *)characters length:(NSUInteger)length freeWhenDone:(BOOL)freeBuffer {
self = [super init];
if (self) {
self.stringHolder = [[NSString alloc] initWithCharactersNoCopy:characters length:length freeWhenDone:freeBuffer];
}
return self;
}
- (NSUInteger)length {
return self.stringHolder.length;
}
- (unichar)characterAtIndex:(NSUInteger)index {
return [self.stringHolder characterAtIndex:index];
}
@end
答案 1 :(得分:0)
你真的是否需要继承NSString
?它是class cluster,(除了其他东西)意味着它很难分类。 Mike Ash在subclassing class clusters上发表了一篇好文章。如果您不知道存在类集群,那么您可能是Cocoa的新手,在这种情况下,最好的简短答案是不要尝试将类集群子类化。
还有previous questions关于在Stack Overflow上继承NSString
的问题。下次您在询问新问题之前可能想要搜索一下。
答案 2 :(得分:0)
使用内部使用NSStrings的包装类来执行您尝试执行的任何操作或操作可能更为明智。但是,这将导致您需要重载所需的任何NSString功能(例如获取字符串的长度)。
或者,您可以创建一个NSString类别(在新文件窗口的Objective-C类旁边找到)。这允许您添加希望“添加”到NSString类的任何属性或方法。现在只需在您希望使用它的任何地方导入此类别,您就可以在任何NSStrings对象上使用所有自定义函数。