gpt4 book ai didi

ios - 我可以在 Objective C 类别中声明非公共(public)方法吗?如果可以,如何声明?

转载 作者:行者123 更新时间:2023-11-29 12:12:06 25 4
gpt4 key购买 nike

为了在我的应用程序中处理从 AFNetworking 库接收到的 JSON 数据,我在 NSDictionary+JSON.h 文件中定义了一个关于 NSDictionary 的类别:

@interface NSDictionary (JSON)
- (NSString *) name;
- (NSString *) extension;
...
@end

在我实现这些方法时,我想声明并使用一个我不想放在头文件中的辅助方法,因为它只是一个实现细节:

- (NSString *) valueForKeyFromDictionaryOrIndexes:(NSString *)key;

我的实现文件 NSDictionary+JSON.m 是这样的:

#import "NSDictionary+JSON.h"

@interface NSDictionary()
// Putting my method declaration here produces a warning.
...
@end


@implementation NSDictionary (JSON)

- (NSString *) valueForKeyFromDictionaryOrIndexes:(NSString *)key {

NSString * value = [self valueForKey:key];

// implementation details omitted

return value;
}

- (NSString *) name {

return [self valueForKeyFromDictionaryOrIndexes:@"Name"];
}

- (NSString *) extension {

return [self valueForKeyFromDictionaryOrIndexes:@"Extension"];
}

...

@end

这工作正常,所以从这个意义上说没有真正的问题。但是:我的辅助方法在定义之前从未声明过。我对此感到有点不舒服。如果我将声明放在实现文件的 @interface ... @end 部分的注释位置(我认为这是声明非公共(public)方法的正确位置),我会收到警告:

category is implementing a method which will also be implemented by its primary class

我尝试通过更换来解决这个问题@interface NSDictionary()和@interface NSDictionary(JSON)但这当然给了我一个不同的警告:

duplicate definition of category 'JSON' on interface 'NSDictionary'

很公平,这确实与我的头文件中的相同,所以这不是一个合适的解决方案。这让我想知道:在类别实现中声明非公共(public)方法的正确方法/位置是什么?

最佳答案

根本不需要在 @interface 中声明一个“私有(private)”Obj-C 方法。

关于ios - 我可以在 Objective C 类别中声明非公共(public)方法吗?如果可以,如何声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33145745/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com