1
これは、スイッチのステートメントが成長して成長するのではなく、Arrayの拡張としてこれを行う方法はありますか?これは動作するはずスイッチアプローチ Swift: Test class type in switch statementスウィフトアレイにエクステンションを追加して条件付きで追加するには?
これは、スイッチのステートメントが成長して成長するのではなく、Arrayの拡張としてこれを行う方法はありますか?これは動作するはずスイッチアプローチ Swift: Test class type in switch statementスウィフトアレイにエクステンションを追加して条件付きで追加するには?
から来た:
exteriorColorOptions.appendIfPossible(option)
otherOptions.appendIfPossible(option)
注:
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
}
}
私はちょうど場所で右の拡張子を持つ次の操作を行うことができますしたいと思い
extension Array {
mutating func appendIfPossible<T>(newElement: T) {
if let e = newElement as? Element {
append(e)
}
}
}
条件付きキャスト新しい要素が の場合、配列要素タイプ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]