2017-12-06 3 views
3

私は単一のviewcontrollerを再利用したいが、若干再利用したい。そして、別のプロパティに基づいていくつかのプロパティを設定するように構造化された方法があるのだろうかと思っている。Swift:設定されている別のプロパティに基づいてプロパティを要求できますか?

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タイプにネストされた特性を有するように、これを強制的に構造化されたスウィフトのような方法がある場合、私は思ったんだけどだろうか?

+0

どのようにしたいですか?値が設定されていない場合、あなたのアプリケーションを 'viewDidLoad'にクラッシュさせますか? – Tj3n

+1

@ michael-hudson:Reactive-CocoaやRxSwiftのようなリアクティブプログラミングフレームワークを使用すると、これらのようなものはかなり簡単になります。 –

+0

@ Tj3n NRitHの答えは本質的に私がdisplayModeを設定するときに値を設定する必要があるように埋め込むことができると期待していました –

答えて

2

は、あなたのenum例のためassociated valuesの使用を検討してください値が戻ったら、変数にバインドしますswitch

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

関連する値を使用すると、スタンドアロンのプロパティ(つまり、オブジェクト変数)は、iddescription、またはnameです。

+0

ありがとう、私は関連付けられた値を認識していませんでしたが、これはまさに私が何をしているかのように見えます!私はまた、サイドノートに感謝します。私の実際のユースケースはもう少し複雑です - 私の例はデモが作成されていましたが、それは良いキャッチです、私はここに来る将来のユーザーのために更新します –

1

私はこのようなものは、あなたが欲しいものだと思う:

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 

は(編集:もちろん、あなたが列挙型を使用しているので、それは少し違うだろうが、あなたはそれの要点を取得します。 )

また、KVOを使用することもできます。

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

の関連を取得するには:

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

これはDisplayMode変数が宣言されるたびに、有効な関連値を提供するために、ユーザーに強制しますので、同じようhttps://developer.apple.com/library/content/documentation/Cocoa/Conceptual/KeyValueObserving/KeyValueObserving.html

+1

いいですよ+1 +1 –

関連する問題