自定义类的 getter 和 setter

Posted

技术标签:

【中文标题】自定义类的 getter 和 setter【英文标题】:getters and setters for custom classes 【发布时间】:2010-09-19 21:48:35 【问题描述】:

如果您合成一个自定义类,是否会为其创建 getter 和 setter?

这是我创建的自定义类。

//  MyClass.h
#import <Foundation/Foundation.h>


@interface MyClass : NSObject <NSCoding> 
    NSString *string1;
    NSString *string2;


@property (nonatomic, retain) NSString *string1;
@property (nonatomic, retain) NSString *string2;

@end

在这里,我将该类的一个对象声明为属性

//  DetailViewController.h


#import <UIKit/UIKit.h>
#import "MyClass.h"


@interface DetailViewController : UIViewController 

    MyClass *myObject;

@property(nonatomic, retain) MyClass *myObject;

@end

我在这里合成对象。

#import "DetailViewController.h"
#import "MyClass.h"


@implementation DetailViewController
@synthesize myObject;

那么它有 getter 和 setter 吗?

当我尝试在 RootViewController.m 中运行此代码时

DetailViewController.myObject = [theArray objectAtIndex:indexPath.row];

我收到一条错误消息,提示“正在访问未知的 'setMyObject:' 类方法。无法设置对象 - 只读属性或未找到设置器。”

【问题讨论】:

【参考方案1】:

仅当您将所需的实例变量声明为属性时,synthesize propname; 才会创建 getter 和 setter。现在,getter 和 setter 中的代码类型取决于您定义的属性属性(nonatomic/atomicassignretaincopy

编辑 OP 修改后的问题:是的,一个 getter/setter 将为DetailViewController 类的myObject 实例变量创建

DetailViewController.myObject = [theArray objectAtIndex:indexPath.row];

您正试图设置一个未定义的类变量DetailViewController 的类型是 Class,而不是 DetailViewController。在DetailViewController实例上执行相同的操作,您应该已经准备就绪。

【讨论】:

以上是关于自定义类的 getter 和 setter的主要内容,如果未能解决你的问题,请参考以下文章

Intellij IDEA 自定义 getter and setter

Dart中类的getter和setter

如何在android中为自定义视图创建setter和getter

如何使用静态变量和自定义 getter 和 setter 在 SWIG 中扩展结构?

springboot的自定义注解功能实现类该怎么写?

Kotlin自定义的getter和mutable list。