2017-02-09 61 views
1

有沒有辦法做到這一點作爲數組的擴展,而不是一個將增長和增長的switch語句?如何添加擴展到Swift數組以有條件追加?

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) 

注:開關的方法來自 Swift: Test class type in switch statement

回答

1

這應該工作:

extension Array { 

    mutating func appendIfPossible<T>(newElement: T) { 
     if let e = newElement as? Element { 
      append(e) 
     } 
    } 
} 

有條件轉換newElement as? Element成功,如果 新元素符合或是數組元素類型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]