2017-02-09 15 views

答えて

1

から来た:

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] 
関連する問題