zoukankan      html  css  js  c++  java
  • [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提供了剩余的值。

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

  • 相关阅读:
    HGOI 20200724
    HGOI 20200722
    [USACO Open08]牛的邻居Cow Neighborhoods解题报告
    [USACO Jan07]考试Schul解题报告
    [CF 249D]Donkey and Start解题报告
    [CF 321D]Ciel and Flipboard解题报告
    [CF 294D]Shaass and Painter Robot解题报告
    [CF 297E]Mystic Carvings解题报告
    [CF 306E]Levko and Game题解翻译
    [CF 316F3]Suns and Rays解题报告
  • 原文地址:https://www.cnblogs.com/strengthen/p/10571999.html
Copyright © 2011-2022 走看看