2016-08-12 98 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值類型。我嘗試了協議,但它需要屬性要求來處理單元格級別。任何其他實現方法的方法以及「常規」枚舉實現在迅速

+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個多個類型,那麼檢查它是哪種類型會很麻煩。

在這一點上,雖然你可能想重新設計你的代碼,但函數的返回類型應儘可能保持不變。