• [Objective-C语言教程]扩展(30)


    类扩展与类别有一些相似之处,但它只能添加到编译时具有源代码的类中(类与类扩展同时编译)。

    类扩展声明的方法是在原始类的实现块中实现的,因此不能在框架类上声明类扩展,例如CocoaCocoa Touch类,如NSString

    扩展名实际上是没有类别名称的类别,它通常被称为匿名类别。

    声明扩展的语法使用@interface关键字,就像标准的Objective-C类描述一样,但不表示子类的任何继承。 它只是添加括号,如下所示 -

    @interface ClassName ()
    
    @end

    扩展的特征

    • 不能为任何类声明扩展,仅适用于原始实现源代码的类。
    • 扩展是添加仅特定于类的私有方法和私有变量。
    • 扩展内部声明的任何方法或变量即使对于继承的类也是不可访问的。

    扩展示例

    创建一个具有扩展名的SampleClass类。 在扩展中,有一个私有变量internalID
    然后,有一个方法getExternalID,它在处理internalID后返回externalID

    示例代码如下所示 -

     1 #import <Foundation/Foundation.h>
     2 
     3 @interface SampleClass : NSObject {
     4    NSString *name;
     5 }
     6 
     7 - (void)setInternalID;
     8 - (NSString *)getExternalID;
     9 
    10 @end
    11 
    12 @interface SampleClass() {
    13    NSString *internalID;
    14 }
    15 
    16 @end
    17 
    18 @implementation SampleClass
    19 
    20 - (void)setInternalID {
    21    internalID = [NSString stringWithFormat: 
    22    @"UNIQUEINTERNALKEY%dUNIQUEINTERNALKEY",arc4random()%100];
    23 }
    24 
    25 - (NSString *)getExternalID {
    26    return [internalID stringByReplacingOccurrencesOfString: 
    27    @"UNIQUEINTERNALKEY" withString:@""];
    28 }
    29 
    30 @end
    31 
    32 int main(int argc, const char * argv[]) {
    33    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    34    SampleClass *sampleClass = [[SampleClass alloc]init];
    35    [sampleClass setInternalID];
    36    NSLog(@"ExternalID: %@",[sampleClass getExternalID]);        
    37    [pool drain];
    38    return 0;
    39 }

    执行上面示例代码,得到以下结果:

    2019-11-22 12:18:32.124 Extensions[121:313] ExternalID: 51

    在上面的示例中,可以看到不直接返回internalID。在这里删除了UNIQUEINTERNALKEY,并且只为方法getExternalID提供了剩余的值。

    上面的示例只使用字符串操作,但它可以具有许多功能,如加密/解密等。

  • 相关阅读:
    使用VS Code插件Graphviz Preview来画图
    Y1S002 xshell脚本编写示意
    Y1S001 ubuntu下samba安装配置以及使用vbs映射到驱动器
    Y1吐槽002 情绪
    Y1E001 HDI二阶板、三阶板
    Y1O001波分复用器
    2018-4-5-cadence skill
    2018-4-5-MEMS
    2018-4-5-硬件集成测试规程结构
    Cadence学习笔记
  • 原文地址:https://www.cnblogs.com/strengthen/p/10571999.html
Copyright © 2020-2023  润新知