2016-08-12 95 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个多个类型,那么检查它是哪种类型会很麻烦。

在这一点上,虽然你可能想重新设计你的代码,但函数的返回类型应尽可能保持不变。