gpt4 book ai didi

swift - 具有共同属性的对象

转载 作者:行者123 更新时间:2023-11-28 14:56:48 24 4
gpt4 key购买 nike

我有三个不同的类 ABC,它们具有一些通用属性。例如,它们都具有名为 index 的属性。此外,它们都继承自其他没有属性 index 的类 X 并且我无法修改这些类(它来自框架)。现在我想创建这些类之一的实例化并设置 index 属性。我现在是怎么做的:

func returnPreparedObjet() -> X? {
if some_condition1 {
let a = A()
a.index = 1
return a
}
else if some_condition2 {
let b = B()
b.index = 1
return b
}
else if some_condition3 {
let c = C()
c.index = 1
return c
}
return nil
}

在不重复 .index = 1return 行的情况下实现它的最佳选择是什么?在 ABC 不继承自 X 的情况下,我也可以实现这一点吗?

最佳答案

您可以将这三个类分组在一个通用协议(protocol)下:

protocol Indexed {
var index: Int { get set }
}

,并为三个类添加一致性

extension A: Indexed {}
extension B: Indexed {}
extension C: Indexed {}

扩展中不需要任何代码,因为类已经声明了一个可写的 index 属性。

然后您可以将 returnPreparedObject 简化为如下所示:

func returnPreparedObject() -> X? {
let result: (X & Indexed)?
if some_condition1 {
result = A()
} else if some_condition2 {
result = B()
} else if some_condition3 {
result = C()
}
result?.index = 1
return result
}

关于swift - 具有共同属性的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49274349/

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