gpt4 book ai didi

ios - Objective-C:如何从子类访问父私有(private)属性?

转载 作者:技术小花猫 更新时间:2023-10-29 11:03:33 25 4
gpt4 key购买 nike

//Super class .h file

@interface MySuperClass : NSObject

@end

//Super class .m file

@interface MySuperClass ()

@property (nonatomic, strong) UITextField *emailField;

@end

@implementation MySuperClass

-(void)accessMyEmailField {

NSLog(@"My super email: %@", self.emailField.text);

}

@end


// ********** my subclass *******

//Subclass .h file

@interface MySubClass : MySuperClass

@end

//SubClass .m file

@interface MySubClass ()

@end

@implementation MySubClass

-(void)myEmail {

NSLog(@"My subclass email: %@", self.emailField.text);

}

-(void)setMyEmailFromSubclass{

self.emailField.Text = @"email@gmail.com"

}

@end
  1. 如何在 -(void)myEmail 方法 中访问 emailField。
  2. 如何在子类 -(void)setMyEmailFromSubclass 中设置电子邮件; ,并在父类(super class) accessMyEmailField
  3. 中访问它

最佳答案

您可以将这些属性的访问器放在第二个头文件中,并在“需要知道”的基础上导入该文件。例如

mySuperClass+undocumentedProperties.h

#import "mySuperClass.h"

@interface mySuperClass(undocumentedProperties)

@property (nonatomic, strong) UITextField *emailField;

@end

我的 super 类.m

#import "mySuperClass+undocumentedProperties.h"

@interface mySuperClass()
///stuff that truly will be private to this class only
// self.emailField is no longer declared here..
@end

@implementation mySuperClass

@synthesize emailField; //(not really needed anymore)

/// etc, all your code unaltered
@end

我的子类.h

#import "mySuperClass.h"
@interface mySubclass:mySuperClass

///some stuff
@end

我的子类.m

#import "mySubclass.h"
#import "mySuperClass+undocumentedProperties.h"
@implementation

//off you go, this class is now 'aware' of this secret inherited property..

@end

显然 MySuperClass.m 必须导入这个 .h 文件以及它的默认文件(或者实际上不是,默认文件内置于这个文件中),但是您的子类也可以导入它(直接导入它们的 .h 文件)。 m 文件,所以这些属性对类来说仍然是私有(private)的。这不是一个合适的类别,因为没有相应的 mySuperClass+undocumentedProperties.m 文件(如果你尝试过你不能为这些 secret 属性合成支持 iVars。享受 :)

关于ios - Objective-C:如何从子类访问父私有(private)属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20793411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com