我需要在类中包含从公共框架头中排除的属性,但它可以在其他框架类中内部使用。 我现在做的是:
MyClass.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
我可以使用私人财产:
MyOtherClass.m:
#import "MyClass.h"
#import "MyClass+Internal.h"
@implementation MyOtherClass
- (void)test {
MyClass *myClass = [MyClass new];
NSLog(@"%@", myClass.mySecretProperty)
}
@end
但是我不喜欢这个设置是因为我在Internal
类别和匿名类别中有重复的属性声明。
有没有办法改善这种设置?
答案 0 :(得分:10)
我认为你只能使用类扩展,不需要使用类别。快速修复是从括号中删除类别名称,将其转换为类扩展,然后从.m文件中删除类扩展声明。 在此之后,您只需在框架类中导入扩展标头,并确保它是框架的私有标头。
<强> 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