子类化NSString

rah*_*uro 3 nsstring

使用WSDL2ObjC我得到很多类,它们是NSString的子类.我发现初始化这些类的任何对象的NSString值很麻烦.

说我的课看起来像这样:

@interface mClass ; NSString {
     int value;
}
Run Code Online (Sandbox Code Playgroud)

现在在我的代码中,我想使用mClass的对象作为NSString,并且还想使用它的属性值,它是一个整数.

我怎样才能做到这一点?

我正在尝试使用这样的代码

 mClass *obj = [[mClass alloc] initWithString:@"Hello"];
Run Code Online (Sandbox Code Playgroud)

但它告诉我一个错误,说我正在使用类的抽象对象,我应该使用具体的实例.

Vla*_*pko 6

如果你真的需要make NSString子类,你应该覆盖3个方法:

- (instancetype)initWithCharactersNoCopy:(unichar *)characters length:(NSUInteger)length freeWhenDone:(BOOL)freeBuffer;
- (NSUInteger)length;
- (unichar)characterAtIndex:(NSUInteger)index;
Run Code Online (Sandbox Code Playgroud)

例如:

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
Run Code Online (Sandbox Code Playgroud)