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提供了剩余的值。

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

  • 相关阅读:
    【BZOJ 4581】【Usaco2016 Open】Field Reduction
    【BZOJ 4582】【Usaco2016 Open】Diamond Collector
    【BZOJ 4580】【Usaco2016 Open】248
    【BZOJ 3754】Tree之最小方差树
    【51Nod 1501】【算法马拉松 19D】石头剪刀布威力加强版
    【51Nod 1622】【算法马拉松 19C】集合对
    【51Nod 1616】【算法马拉松 19B】最小集合
    【51Nod 1674】【算法马拉松 19A】区间的价值 V2
    【BZOJ 2541】【Vijos 1366】【CTSC 2000】冰原探险
    【BZOJ 1065】【Vijos 1826】【NOI 2008】奥运物流
  • 原文地址:https://www.cnblogs.com/strengthen/p/10571999.html
Copyright © 2011-2022 走看看