我想使用@property语法来声明一个合成属性,该属性是公开只读的,但有一个setter,可以从类内部私下调用.

由于它是Objective-C,这基本上意味着将合成setFoo:方法,但在类本身之外调用它将导致警告(无法识别的 Select 器).为了触发警告,我必须申报财产readonly;有没有办法强制合成一个只能在类中使用的setter?

推荐答案

我想你要找的是所谓的类扩展.您将在标题中声明该属性为只读:

@interface MyClass : NSObject {
}

@property (readonly, assign) NSInteger myInteger;

@end

然后在实现文件中重新声明类扩展名:

@interface MyClass ()

@property (readwrite, assign) NSInteger myInteger;

@end


@implementation MyClass

@end

要了解更多信息,请查看Apple的documentation

Objective-c相关问答推荐

Objective C中的简单字符串连接

多个 WKWebView 之间的 Cookie 共享

防止同时多个按钮

如何在旋转时定义 CollectionView 的大小

使用 [NSBundle mainBundle] pathForResource: ofType:inDirectory: 访问文件

从 NSError 返回 NSString

从 Storyboard 实例化视图控制器与创建新实例

NSView 的边界与框架

Objective C - 为什么常量以 k 开头

Objective-C 属性的默认属性是什么?

UITableView 滚动事件

如何在 XCode 中复制文件?

判断 NSString 是否只是由空格组成

从 UIPageViewController 中移除视图控制器

自定义导航栏样式 - iOS

在 UICollectionView 上重置滚动

我可以在 Objective-C switch 语句中声明变量吗?

UICollectionView 自动调整高度

为什么使用弱指针进行委托?

为什么我们不能在当前队列上使用 dispatch_sync?