簡體   English   中英

Objective-C類擴展

[英]Objective-C Class extensions

我剛剛開始學習obj-C,所以很抱歉,如果我缺少明顯的內容。 我想使用clpPlayerStats對象訪問“ passCode”(擴展名),但這是不可能的(“在對象上找不到屬性...”)。 有沒有簡單的方法可以解決此問題?

clpPlayerStats.h

#import <Foundation/Foundation.h>

@interface clpPlayerStats : NSObject

@property(nonatomic, copy) NSString* name; 

@end

clpPlayerStats.m

#import "clpPlayerStats.h"

@interface clpPlayerStats()

    @property (nonatomic) unsigned int passCode;

@end

@implementation clpPlayerStats
@end

的main.m

#import <Foundation/Foundation.h>
#import "clpPlayerStats.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        clpPlayerStats *clapslock = [[clpPlayerStats alloc] init];
        NSString *username = [NSString stringWithFormat:@"xxxPussySlayerxxx"];
        clapslock.name = username;
        clapslock.passCode = 12; // <------ "Property not found on object..."
    }
    return 0;
}

使用此代碼:

@interface clpPlayerStats()

    @property (nonatomic) unsigned int passCode;

@end

您正在宣告私有財產。 如果要在類范圍之外使用passCode則必須在公共接口中添加:

#import <Foundation/Foundation.h>

@interface clpPlayerStats : NSObject

    @property(nonatomic, copy) NSString* name;
    @property (nonatomic) unsigned int passCode; 

@end

並刪除.m中的界面

首先,班級名稱應始終以第二個字母開頭。

其次,類擴展擴展了的@interface 而且,對於所有C語言,是否可以看到任何聲明都完全取決於編譯器在使用時是否可以看到該聲明。

因此,如果要聲明半私有的內容,則通常會將@interface ClpPlayerStats()擴展名移動到Private標頭文件中。 ClpPlayerStats_Private.h 然后,如果您要訪問“私有” API,請#import ClpPlayerStats_Private.h

在Objective-C中確實沒有正式的隱私概念。 只是對編譯器的可見性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM