Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 返回类实例的Switch语句_Ios_Swift_Xcode_Swift4 - Fatal编程技术网

Ios 返回类实例的Switch语句

Ios 返回类实例的Switch语句,ios,swift,xcode,swift4,Ios,Swift,Xcode,Swift4,在我的UITableView中,我正在传递一个数据数组,每个数据都有一个唯一的ID。我想通过唯一ID初始化类来调用该类中的某个函数 我可以在单元格中执行该语句,但以后将其作为一个可重用函数(我计划这样做)会很有用 基本上我想这样称呼它: (不完全是我的代码,只是我喜欢的示例) 我已经厌倦了使用AnyClass,尽管该类没有显示属性 函数名对于这些类中的每一个都是通用的。初始化类时,将填充其中的数组。然后我调用这个函数来返回计数 class BreakfastData { myArr :

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

我可以在单元格中执行该语句,但以后将其作为一个可重用函数(我计划这样做)会很有用

基本上我想这样称呼它:

(不完全是我的代码,只是我喜欢的示例)

我已经厌倦了使用
AnyClass
,尽管该类没有显示属性

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

class BreakfastData {

    myArr : NSArray = []

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

    func totalFood() -> Int {

    return myArr.count

    }

}

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


您的
totalFood()
方法是如何定义的?它是
早餐数据
午餐数据
所共有的一种类方法吗?还是其他什么?@OOPer是的,这是这些类将具有的通用函数名。我只是让它在类中进行数组计数,如果
totalFood()
是类方法或实例方法,则返回一个IntIt非常重要。请举例说明。不要在modelBykey中键入cast尝试在这里键入case FoodClass.modelBykey(key:uniqueID),然后查看您的class@OOPer更新,这将是一个类方法是正确的方式。我还键入了答案:D@ShauketSheikh,事实上,我已经准备了两个版本的代码,一个是实例方法版本,另一个是静态方法版本。。。这是一个适应最新更新的。。。这是一项很好的工作……我强烈建议不要初始化为空数组,只在
init()
中追加多个项。只需将其直接初始化为literal
var myArr=[“ham”,“eggs”]
。另外,请注意,请使用您对问题域的了解,想出一个更好的名称来替换
myArr
let FoodClass = GetFoodClass()
let TheClass = FoodClass.modelByKey(key: uniqueID)
let totalFoods = TheClass.totalFood()
class BreakfastData {

    myArr : NSArray = []

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

    func totalFood() -> Int {

    return myArr.count

    }

}
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)
}