2016-08-12 6 views
0
enum Sections: Int { 
    case parent 
    case general 
} 

struct Parent { 
    let name: String 
} 


enum General: Int { 
    case manage 
    case settings 

    func title() -> String { 
    switch self { 
    case .manage: 
     return "Manage" 
    case .settings: 
     return "Settings" 
    } 
    } 
} 


struct DataProvider { 

    func data(at index: NSIndexPath) -> ? { 

    let section = Sections(rawValue: index.section)! 
    switch section { 
    case .parent: 
     print("parent \(Parent(name: "Venkat"))") 
     return Parent(name: "Venkat") 
    case .general: 
     let general = General(rawValue: index.row)! 
     print(general.title()) 
     return general 
    } 
} 
} 

ここで、funcデータ(インデックス:NSIndexPath)は、indexpathに基づいて値の型を返す必要があります。私はプロトコルを試しましたが、セルレベルで処理するためにはプロパティ要件が必要です。メソッドを実装する他の方法と "一般" enumの実装即座に2つの異なる値型を処理する

+0

'CaseCountable'の定義を追加してください。 –

+0

@appzYourLifeそれは私が編集したカスタムプロトコルです。 – venky

+0

' data(at:) '関数が返す可能性のある値をリストアップできますか? –

答えて

0

共有の親/プロトコルを作成すると、関数は共有の親インスタンスを返すことができます。または、関数が共有の親であるAnyObjectを返すようにすることもできます。

func data(atIndex: NSIndexPath) -> AnyObject {/*implementation*/} 
/* 
* Later in another function 
*/ 
let someObj = data(atIndex:index) 
if let parentObj = someObj as? Parent 
{ 
// Do what you need with the parent object, possibly save it to a parent ref 
} 

これは、Generalタイプの場合も同様です。これはスーパースケーラブルなシステムではありません。なぜなら、戻りたい関数に3〜4つ以上の型がある場合、それはどの型かを調べることが面倒になるからです。

その時点で、おそらくコードを再設計する必要がありますが、戻り値の型は可能な限り一定でなければなりません。

関連する問題