有没有一种方法可以将此作为 Array 的扩展而不是不断增长的 switch 语句?
fileprivate var exteriorColorOptions = [ExteriorColorOption]()
fileprivate var otherOptions = [SomeOtherOption]()
: more options
func add(option:FilteredOption) {
switch(option) {
case let thing as ExteriorColorOption:
exteriorColorOptions.append(thing)
case and on and on
default:
break
}
}
我希望能够使用正确的扩展程序执行以下操作:
exteriorColorOptions.appendIfPossible(option)
otherOptions.appendIfPossible(option)
注:switch方法来自 Swift: Test class type in switch statement
最佳答案
这应该有效:
extension Array {
mutating func appendIfPossible<T>(newElement: T) {
if let e = newElement as? Element {
append(e)
}
}
}
条件转换 newElement as?元素
成功如果
新元素符合或者是数组元素类型 Element
(的子类)的实例。
例子:
class A {}
class B: A {}
class C {}
var array: [A] = []
array.appendIfPossible(newElement: B())
print(array) // [B]
array.appendIfPossible(newElement: C())
print(array) // [B]
关于arrays - 如何将扩展添加到 Swift 数组以有条件地追加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42136342/