gpt4 book ai didi

objective-c - 隐藏公共(public)框架 header 中的属性,但在内部保持可用

转载 作者:搜寻专家 更新时间:2023-10-30 19:54:00 25 4
gpt4 key购买 nike

我需要在类中拥有从公共(public)框架 header 中排除的属性,但它可以在其他框架类中内部使用。我现在所做的是:

我的类.h:

@interface MyClass: NSObject

@end

MyClass+Internal.h

@interface MyClass (Internal)
@property (nonatomic, copy) NSString *mySecretProperty;
@end

MyClass.m

#import "MyClass.h"
#import "MyClass+Internal.h"

@interface MyClass ()
@property (nonatomic, copy) NSString *mySecretProperty;
@end

@implementation MyClass
@end

我可以像这样使用私有(private)属性(property):

我的其他类.m:

#import "MyClass.h"
#import "MyClass+Internal.h"

@implementation MyOtherClass
- (void)test {
MyClass *myClass = [MyClass new];
NSLog(@"%@", myClass.mySecretProperty)
}
@end

但我不喜欢此设置的是,我在我的 Internal 类别和匿名类别内部有重复的属性声明。有没有办法改进此设置?

最佳答案

我认为你可以只使用类扩展,不需要使用类别。快速修复是从括号中删除类别名称,将其转换为类扩展,然后从 .m 文件中删除类扩展声明。在此之后,您只需在框架类中导入扩展 header ,并确保它是您框架的私有(private) header 。

MyClass.h

@interface MyClass: NSObject

@end

MyClass+Internal.h

#import "MyClass.h"

@interface MyClass ()
@property (nonatomic, copy) NSString *mySecretProperty;
@end

MyClass.m

#import "MyClass.h"
#import "MyClass+Internal.h"

@implementation MyClass
@end

MyOtherClass.m:

#import "MyClass.h"
#import "MyClass+Internal.h"

@implementation MyOtherClass
- (void)test {
MyClass *myClass = [MyClass new];
NSLog(@"%@", myClass.mySecretProperty)
}
@end

关键是了解类别和类扩展之间的区别,请参见此处:https://stackoverflow.com/a/4540582/703809

关于objective-c - 隐藏公共(public)框架 header 中的属性,但在内部保持可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19095716/

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