我需要在类中包含从公共框架头中排除的属性,但它可以在其他框架类中内部使用.我现在做的是:
MyClass.h:
@interface MyClass: NSObject
@end
Run Code Online (Sandbox Code Playgroud)
MyClass的+ Internal.h
@interface MyClass (Internal)
@property (nonatomic, copy) NSString *mySecretProperty;
@end
Run Code Online (Sandbox Code Playgroud)
MyClass.m
#import "MyClass.h"
#import "MyClass+Internal.h"
@interface MyClass ()
@property (nonatomic, copy) NSString *mySecretProperty;
@end
@implementation MyClass
@end
Run Code Online (Sandbox Code Playgroud)
我可以使用私人财产,如:
MyOtherClass.m:
#import "MyClass.h"
#import "MyClass+Internal.h"
@implementation MyOtherClass
- (void)test {
MyClass *myClass = [MyClass new];
NSLog(@"%@", myClass.mySecretProperty)
}
@end
Run Code Online (Sandbox Code Playgroud)
但我不喜欢这个设置是我在我的Internal类别和匿名类别中有重复的属性声明.有没有办法改善这种设置?
law*_*cko 11
我认为你只能使用类扩展,不需要使用类别.快速修复是从括号中删除类别名称,将其转换为类扩展,然后从.m文件中删除类扩展声明.在此之后,您只需在框架类中导入扩展标头,并确保它是框架的私有标头.
MyClass.h
@interface MyClass: NSObject
@end
Run Code Online (Sandbox Code Playgroud)
MyClass的+ Internal.h
#import "MyClass.h"
@interface MyClass ()
@property (nonatomic, copy) NSString *mySecretProperty;
@end
Run Code Online (Sandbox Code Playgroud)
MyClass.m
#import "MyClass.h"
#import "MyClass+Internal.h"
@implementation MyClass
@end
Run Code Online (Sandbox Code Playgroud)
MyOtherClass.m:
#import "MyClass.h"
#import "MyClass+Internal.h"
@implementation MyOtherClass
- (void)test {
MyClass *myClass = [MyClass new];
NSLog(@"%@", myClass.mySecretProperty)
}
@end
Run Code Online (Sandbox Code Playgroud)
关键是要了解类别和类扩展之间的区别,请参见此处:https://stackoverflow.com/a/4540582/703809
| 归档时间: |
|
| 查看次数: |
2396 次 |
| 最近记录: |