切换语句以返回类实例

时间:2018-07-11 00:38:20

标签: ios swift xcode swift4

在我的UITableView中,我传递了一个数据数组,每个数据都有一个唯一的ID。我想通过唯一的ID初始化该类,从而在该类中调用某个函数

我可以在单元格中执行该语句,但是稍后使它成为可重用的函数(我打算)是很有用的

class GetFoodModel {

    var modelArr : NSMutableArray = []

    func modelByKey(key : String) -> Any {
        switch key {
            case "breakfast":
                return BreakfastData() as BreakfastData
            case "lunch":
                return LunchData() as LunchData

        default:
           return false
        }

    }


}

基本上,这是我的称呼方式:

(不完全是我的代码,只是我想要的一个示例)

let FoodClass = GetFoodClass()
let TheClass = FoodClass.modelByKey(key: uniqueID)
let totalFoods = TheClass.totalFood()

尽管这些类的属性没有显示,但我已经厌倦了使用AnyClass

对于每个这些类,函数名称都是通用的。初始化类时,将填充其中的数组。然后,我调用此函数以返回计数。

class BreakfastData {

    myArr : NSArray = []

    init() {
       myArr.append('Eggs')
       myArr.append('Ham')
    }

    func totalFood() -> Int {

    return myArr.count

    }

}

1 个答案:

答案 0 :(得分:1)

似乎您只需要一个协议,表示符合该协议的类具有方法totalFood()

protocol FoodDataType {
    func totalFood() -> Int
}

class BreakfastData: FoodDataType {
    var myArr: [String] = []

    init() {
        myArr.append("Eggs")
        myArr.append("Ham")
    }

    func totalFood() -> Int {
        return myArr.count
    }
}

class LunchData: FoodDataType {
    var myArr: [String] = []

    init() {
        //populate myArr
        //...
    }

    func totalFood() -> Int {
        return myArr.count
    }
}

class GetFoodModel {

    func modelByKey(key : String) -> FoodDataType? {
        switch key {
        case "breakfast":
            return BreakfastData()
        case "lunch":
            return LunchData()

        default:
            return nil
        }
    }
}

let uniqueID = "breakfast"

let foodModel = GetFoodModel()
if let theFoodData = foodModel.modelByKey(key: uniqueID) {
    let totalFoods = theFoodData.totalFood()
    print(totalFoods)
}