gpt4 book ai didi

objective-c - 对象的条件初始化

转载 作者:行者123 更新时间:2023-12-01 19:32:40 24 4
gpt4 key购买 nike

我想在 Objective-C 中使用此代码:

if (a == b) {
Class1 *object = [[Class1 alloc] init];
} else {
Class2 *object = [[Class2 alloc] init];
}

但是这些对象在 IF 范围之外不可见。有没有什么方法可以在 IF 语句内初始化对象并在 IF 之外使用它们? Class2是Class1的子类,所以稍后我将使用类的公共(public)属性,即Class1属性。

最佳答案

鉴于Class2是一个子类,我们可以在外部将变量声明为Class1对象:

Class1 *object;
if (a == b) {
object = [[Class1 alloc] init];
} else {
object = [[Class2 alloc] init];
}

我们也可以这样一行:

Class1 *object = (a == b) ? [[Class1 alloc] init] : [[Class2 alloc] init];

现在,在当前范围内,如果您尝试调用对象上的 Class2 方法,编译器将引发警告。但您也可以稍后检查以确定它是什么类型的对象:

if ([object isKindOfClass:[Class2 class]]) {
Class2 *c2obj = (Class2 *)obj;
// call class2 methods on `c2obj
}

您仍然可以在不进行强制转换的情况下调用方法...但编译器更喜欢您这样做。

这仅是调用 Class2 方法/属性所必需的。您不必进行强制转换即可调用 Object 上的 Class1 方法或属性。

实际上,我通常在 tableView:cellForRowAtIndexPath: 中使用这种方法,其中我有几种不同类型的单元格,但它们都是同一父类的子类和/或都符合通用协议(protocol)。

关于objective-c - 对象的条件初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25583255/

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