扩展特征
- 不能为任何类声明扩展,只能为我们拥有源代码原始实现的类声明扩展。
- 一个扩展是添加专用于该类的私有方法和私有变量。
- 扩展内部声明的任何方法或变量甚至都不能被继承的类访问。
让我们创建一个具有扩展名SampleClass的类。在扩展名中,我们有一个私有变量internalID。然后,让我们有一个方法getExternalID,它在处理了internalID之后返回了externalID。
#import <Foundation/Foundation.h>
@interface SampleClass : NSObject {
NSString *name;
}
- (void)setInternalID;
- (NSString *)getExternalID;
@end
@interface SampleClass() {
NSString *internalID;
}
@end
@implementation SampleClass
- (void)setInternalID {
internalID = [NSString stringWithFormat:
@"UNIQUEINTERNALKEY%dUNIQUEINTERNALKEY",arc4random()%100];
}
- (NSString *)getExternalID {
return [internalID stringByReplacingOccurrencesOfString:
@"UNIQUEINTERNALKEY" withString:@""];
}
@end
int main(int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
SampleClass *sampleClass = [[SampleClass alloc]init];
[sampleClass setInternalID];
NSLog(@"ExternalID: %@",[sampleClass getExternalID]);
[pool drain];
return 0;
}
编译并执行上述代码后,将产生以下结果-
2020-08-21 09:07:14.900 helloWorld[7852:8336] ExternalID: 51
在上面的示例中,我们可以看到internalID没有直接返回。在这里,我们删除UNIQUEINTERNALKEY,仅将剩余值提供给方法getExternalID。上面的示例仅使用字符串操作,但可以具有许多功能,如加密/解密等。