gpt4 book ai didi

objective-c - 调用父类(super class)的 init 方法后强制初始化父类(super class)的 ivar

转载 作者:行者123 更新时间:2023-12-03 17:54:06 25 4
gpt4 key购买 nike

我需要在父类(super class)中强制初始化 ivar,但如果没有初始化子类中的其他数据,通常无法初始化 ivar。我想到的两种解决方案是:

  1. 将 ivar 所需的生成 key 传递给父类(super class)的 init 方法
  2. 从子类的 init 方法调用第二个父类(super class)方法

这是示例(人为的、不起作用的)代码。 stringBasedOnSubclassKey ivar 应从子类的 key 方法初始化为 NSString。

@interface MySuperclass : NSObject
@property (nonatomic, readonly) NSString *stringBasedOnSubclassKey;
@end

@interface MySubclass : MySuperclass
@property (nonatomic, assign, readonly) int value;
@end

@implementation MySubclass

- (instancetype)init
{
if (self = [super init]) {
_value = 30;
}
return self;
}

- (NSString *)key
{
return [NSString stringWithFormat:@"UniqueKey-%d", self.value];
}

所以问题是有没有办法使用“key”方法的返回值强制初始化 stringBasedOnSubclassKey ivar?我不相信我可以强制执行上面的解决方案 1 和 2。这些子类也可能是由其他外部开发人员创建的,因此关键方法可能比这更复杂。

更新:我正在处理该基类的现有子类,因此限制对现有子类的更改的解决方案是一个因素。

最佳答案

以强制初始化stringBasedOnSubclassKey的方式编写getter:

- (NSString *) stringBasedOnSubclassKey {
if !(_stringBasedOnSubclassKey) {
_stringBasedOnSubclassKey = // whatever;
}
return _stringBasedOnSubclassKey;
}

并编写父类(super class)key方法来抛出异常,从而强制客户端在子类中重写它。

关于objective-c - 调用父类(super class)的 init 方法后强制初始化父类(super class)的 ivar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16375508/

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