子类化 NSString

问题描述 投票:0回答:3

使用 WSDL2ObjC 我得到了很多 NSString 子类的类。 我发现初始化这些类的任何对象的 NSString 值很麻烦。

假设我的班级是这样的:

@interface mClass ; NSString {
     int value;
}

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

我该怎么做?

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

 mClass *obj = [[mClass alloc] initWithString:@"Hello"];

但是它向我显示一个错误,说我正在使用类的抽象对象,我应该使用具体实例。

nsstring
3个回答
7
投票

如果你确实需要创建 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

@implementation 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

0
投票

真的需要子类化

NSString
吗?它是一个类簇,这(除了其他事情之外)意味着它很难子类化。 Mike Ash 有一篇关于“子类化类集群”的好文章。如果您不知道类簇的存在,您可能是 Cocoa 的新手,在这种情况下,最好的简短答案是 不要尝试子类化类簇 Stack Overflow 上还有关于子类化的

之前的问题

NSString。下次您可能想在提出新问题之前进行一些搜索。

    


0
投票

或者,您可以创建一个 NSString 类别(位于新文件窗口中 Objective-C 类旁边)。这允许您添加任何您希望“添加”到 NSString 类的属性或方法。现在,只需将这个类别导入到您想要使用的任何地方,您就可以在任何 NSStrings 对象上使用所有自定义函数。

© www.soinside.com 2019 - 2024. All rights reserved.