子类化 NSString [英] Subclassing NSString
问题描述
使用 WSDL2ObjC 我得到了很多类,它们是 NSString 的子类.我发现初始化这些类的任何对象的 NSString 值很麻烦.
Using WSDL2ObjC I am getting lot of classes which are subclasses of NSString. I am finding it troublesome to initialize the NSString value of any object of those classes.
说我的类看起来像这样:
Say my class looks like this :
@interface mClass ; NSString {
int value;
}
现在在我的代码中,我想使用 mClass 的对象作为 NSString 并且还想使用它的属性值,它是一个整数.
Now in my code I would like to use objects of mClass as both NSString and also want to use its attribute value which is an integer.
我该怎么做?
我正在尝试使用这样的代码
I am trying to use code like this
mClass *obj = [[mClass alloc] initWithString:@"Hello"];
但是它向我显示了一个错误,说我使用的是类的抽象对象,我应该使用具体实例.
But it's showing me an error saying I am using an abstract object of a class , I should use concrete instance instead.
推荐答案
如果你真的需要创建 NSString 子类,你应该重写 3 个方法:
If you really need make NSString subclass you should override 3 methods:
- (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
这篇关于子类化 NSString的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!