2017-02-09 1 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) 
     } 
    } 
} 

조건부 캐스트 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] 
관련 문제