swift中的类型协议数组

时间:2017-02-01 03:45:01

标签: swift

swift获取特定类型对象的最佳方法是什么。 e.g

protocol Fruit {
    func setColor()

}

class Orange:NSObject, Fruit {
    func setColor() {

    }
}

class Apple:NSObject, Fruit {
    func setColor() {
    }
}


class MyClass {

    var fruits:[Fruit]? // get from data base

    //here how to get fruits only of type Orange. i.e. Array of oranges

}

这里有一种方法是我可以放入“for in”循环并检查每个对象的类型,然后可以将它添加到新数组中。

但还有其他任何可行的方法吗?

编辑:

以下对我有用。还有其他办法吗?

  var oranges: [Orange] = []
   for orange in fruits {

   if let myOrange = orange as? Orange {
        oranges.append(myOrange)
     }
   }

1 个答案:

答案 0 :(得分:2)

如果您只想在for循环中迭代这些,只需添加where子句:

for fruit in fruits where fruit is Orange {

}

如果您希望存储过滤后的数组(仍为[Fruit]类型)以供将来使用,请使用filter

let oranges = fruits.filter{ $0 is Orange }

如果您希望存储filtere数组(类型为[Orange])以供将来使用,请使用用户flatMap

let oranges = fruits.flatMap{ $0 as? Orange }