目标C类扩展-如何用readwrite方法覆盖readonly



我很难理解如何用类扩展中编写的readwrite方法覆盖只读方法。我在头文件中有一个只读方法,在实现文件中,我试图通过使用类扩展名来覆盖它。我刚刚在这个线程中询问了这一点,其中包括我所指的代码:在ObjectiveC,macOS中的类扩展有问题。获取错误"NSInvalidArgumentException",没有可见的@接口声明选择器

这里:Objective-C Sucinctly:Categories and Extensions是我正在使用的另一个源,这让我相信我应该能够使用类扩展名用readwrite属性覆盖头文件中声明的只读属性。如果我错了,请纠正我,我是一个完全的新手,只是想弄清楚基础知识。

诀窍是不要覆盖。您可以覆盖。您可以编写一个只读方法,添加所需的任何处理,然后调用super并返回该结果,或者提供自定义结果。(参考您自己的ivar或财产或提供计算结果)

好的,在你编辑之后。

方法略有不同。你说的是房地产。Objective-C中的一个属性基本上是声明一个ivar或实例变量,该变量(通常)具有标准的setter和getter方法。这些设置或获得ivar的值。

如果您的头中有一个只读属性,或者从超类继承(使其在头中有效),那么是的,在.m或实现文件中将该属性重新声明为读写是一种常见的做法。您添加了一个类扩展部分。类扩展基本上是类上的一个未命名类别。

示例。

In .h
@interface Cat : NSObject <>
@property (readonly) NSInteger countOfCatTails;
@end
In .m
@interface Cat ()
@property NSInteger countOfCatTails;
@end

相关内容

最新更新