4

我需要在公共框架头文件中排除的类中有属性,但它可以在其他框架类内部使用。我现在做的是:

MyClass.h:

@interface MyClass: NSObject

@end

MyClass+Internal.h

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

我的班级.m

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

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

@implementation MyClass
@end  

我可以使用私有财产,例如:

我的其他类.m:

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

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

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

4

1 回答 1

13

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

我的类.h

@interface MyClass: NSObject

@end

MyClass+Internal.h

#import "MyClass.h"

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

我的班级.m

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

@implementation MyClass
@end

我的其他类.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

于 2013-09-30T14:20:14.447 回答