2017-12-06 2 views
3

단일 viewcontroller 재사용하고 싶지만 약간 re-purpose 및 다른 속성을 기반으로 설정할 수있는 속성이 필요한 구조화 된 방법이 있는지 궁금하네요.스위프트 : 설정중인 다른 속성을 기반으로 속성을 요구할 수 있습니까?

For example assume that the viewcontroller has the following properties - var displayMode: DisplayMode // see below - var id: Int - var description: String - var name: String

우리가 빨리보기 모드에있는 경우는 내가 ID 및 설명 값이 설정 될 것으로 예상된다. 그렇지 않으면 defaultView 모드에있는 경우 Name 속성을 설정해야합니다.

enum DisplayMode { 
    case quickView 
    case defaultView 
} 

분명히 난 그냥 사람들을 설정하고이 설정 될 것으로 예상하지만, DisplayMode를 유형에 중첩 된 특성을 갖는 것처럼,이 강요하는 구조 스위프트와 같은 방법이 있는지 궁금하네요 수 있을까?

var displayMode: DisplayMode { 
    didSet { 
     if displayMode == quickview { 
      // self.id = whatever 
      // do whatever else you want 
     } 
     else if displayMode == default { 
      // self.id = whatever 
      // do whatever else you want 
     } 
    } 
} 

var id: Int 
var description: String 
var name: String 

(편집 : 당신이 열거를 사용하고 있기 때문에 물론, 조금 다른 것, 그러나 당신은 그것의 요점을 얻을

+0

어떻게 원하십니까? 값이 설정되지 않은 경우'viewDidLoad'에 앱을 충돌 시키시겠습니까? – Tj3n

+1

@ michael-hudson : Reactive-Cocoa 나 RxSwift와 같은 반응적인 프로그래밍 프레임 워크를 사용하면 이러한 것들이 상당히 똑바로됩니다. –

+0

@ Tj3n NRitH의 대답은 본질적으로 내 displayMode를 설정할 때 그 값을 설정할 필요가 있다는 것을 묻는 내 '요구 사항'을 만족시키는 것 같다. –

답변

2

것은과 같이, 당신의 enum 경우에 associated values 사용을 고려 :

var mode = DisplayMode.quickView(id: 11, description: "Prosecco") 

는 관련하려면하십시오 DisplayMode 변수가 선언 될 때마다

enum DisplayMode { 
    case quickview(id: Int, description: String) 
    case defaultview(name: String) 
} 

이 유효 관련 값을 제공하기 위해 사용자를 강제로 값을 복원하면 변수를 변수에 바인딩합니다. switch :

switch mode { 
case let .quickView(id, description): 
    // do something with id and description 
case let .defaultview(name): 
    // do something with name 
} 

관련 값을 사용하면 독립 실행 형 속성을 선언 할 필요가 없습니다 (예 : 개체 변수)는 id, description 또는 name입니다.

+0

감사합니다, 나는 연관된 값을 인식하지 못했지만이 정확히 내가 쫓고있어! 나는 또한 쪽지에 감사한다. 내 실제 사용 사례는 좀 더 복잡합니다. 예가 인위적인 데모이지만 좋은 캐치이며 여기에 오는 미래의 사용자를 위해 업데이트 할 것입니다. –

관련 문제