我有三个不同的类 A
、B
和 C
,它们具有一些通用属性。例如,它们都具有名为 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 = 1
和 return
行的情况下实现它的最佳选择是什么?在 A
、B
、C
不继承自 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/