使用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)
但它告诉我一个错误,说我正在使用类的抽象对象,我应该使用具体的实例.
如果你真的需要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)