Objective C 类扩展 - 如何用 readwrite 方法覆盖只读?

Posted

技术标签:

【中文标题】Objective C 类扩展 - 如何用 readwrite 方法覆盖只读?【英文标题】:Objective C class extensions- how to overwrite readonly with readwrite method? 【发布时间】:2014-09-04 22:40:43 【问题描述】:

我无法理解如何使用在类扩展中编写的 readwrite 方法覆盖 readonly 方法。我的头文件中有一个只读方法,在我的实现文件中,我尝试使用类扩展名覆盖它。我刚刚在这个线程中询问了这个问题,其中包含了我所指的代码:Having trouble with class extension in Objective C, mac OS. Getting error 'NSInvalidArgumentException', no visible @interface declares the selector

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

【问题讨论】:

呃,什么是“读写方法”? 对不起我的意思是属性,读写的意思有一个默认的getter和setter。 【参考方案1】:

诀窍是不要覆盖。 你覆盖。 您编写一个只读方法来添加您需要的任何处理,然后调用 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

【讨论】:

对不起,我很难理解你在说什么,我不习惯很多编码术语。 “添加任何处理”是什么意思?另外,当您说“返回该结果”时,您指的是什么结果?最后,括号里指的是什么? 这正是我所拥有的,但我得到了错误,'no visible @interface for "XYZPerson" 声明了选择器 "setHeight"。' 我在原始问题中链接了代码,“在 Objective C、mac OS 中遇到类扩展问题。出现错误 'NSInvalidArgumentException',没有可见的@interface 声明选择器”

以上是关于Objective C 类扩展 - 如何用 readwrite 方法覆盖只读?的主要内容,如果未能解决你的问题,请参考以下文章

c ++如何用组合扩展一个类?

如何用XCode创建Objective-c和C++的混编工程?

进一步澄清“如何用objective c实现UISearchController”

如何用数据库表模拟“扩展类”?

如何用目标 c 实现 UISearchController

在我的 WatchKit 扩展中引用一个 Objective c 类(swift)