arrays - 如何将扩展添加到 Swift 数组以有条件地追加?

标签 arrays swift generics swift3 generic-collections

有没有一种方法可以将此作为 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/

相关文章:

arrays - 如何增加从数组中获取特定随机对象的可能性

javascript - PHP json_encode 到 JS 对象数组

Swift:初始化具有大量属性的模型类的正确方法

ios - 刷新控制(拉动刷新)滞后?

json - Flutter - 带有 Dart 的通用 json 序列化器

arrays - 接受二维数组并返回数组列的元组的函数?

ios - Firebase 推送通知不适用于手机但适用于模拟器

c# - 以对象和成员名称作为参数的通用函数?

java - 如何使用 Java 泛型来强制执行类型限制

c# - 如何使用 Array.sort 按特定元素对结构数组进行排序