子类化 NSString [英] Subclassing NSString

查看:56
本文介绍了子类化 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆