2015-08-26 45 views
1

所以我工作的一个菜单式的类,由于某种原因,我得到的错误:“在通话中缺少对参数‘菜’的说法”在元组缺少参数变量呼叫

下面是代码:

class Meal { 
    var nameOfMeal: String 
    var menu : [(sectionName: String, dishes: [Dish])] 
    var hours: String 

    init(nameOfMeal: String, menuIDs: [(sectionName: String, dishIDs: [String])], hours: String) { 
     self.nameOfMeal = nameOfMeal 
     setMenuFromIDs(menuIDs) 
     self.hours = hours 
    } 

    func setMenuFromIDs(menuIDs: [(sectionName: String, dishIDs: [String])]){ 
     menu = [] 
     for menuSection in menuIDs { 
      var loadedDishes = CoreDataUtility.loadArrayOfDishesFromIDs(menuSection.dishIDs) 
      menu.append((sectionName: menuSection.sectionName, dishes: loadedDishes)) 
     } 
    } 

} 

的错误是在menu.append((sectionName: menuSection.sectionName....))

我已经检查的menu类型,loadedDishes,我已经分离的论点menu.append,并检查它的类型和他们,因为他们笑都出现ULD。没有任何可选项。我已经从元组中删除了sectionNamedishes标签,但该错误仍然神秘地出现。

任何人都可以请帮我找出原因吗?

谢谢!

回答

1

至于内特库克said here

… don't do this. Tuples are designed for temporary use and will miss out on a lot of Swift's strengths (compiler optimizations, etc.) …

基于这个问题的答案,我改写了你的代码为:

typealias MyTuple = (sectionName: String, dishes:[Dish]) 

class Meal { 
    var nameOfMeal: String 
    var menu : [MyTuple] 
    var hours: String 

    init(nameOfMeal: String, menuIDs: [(sectionName: String, dishIDs: [String])], hours: String) { 
     self.nameOfMeal = nameOfMeal 
     self.hours = hours 
     self.menu = [("", [Dish]())] 
     setMenuFromIDs(menuIDs) 
    } 

    func setMenuFromIDs(menuIDs: [(sectionName: String, dishIDs: [String])]){ 
     menu = [] 
     for menuSection in menuIDs { 
      var loadedDishes = CoreDataUtility.loadArrayOfDishesFromIDs(menuSection.dishIDs) 
      menu.append((menuSection.sectionName, loadedDishes)) 
     } 
    } 

} 

...它现在编译!

请注意,我也动线setMenuFromIDs(menuIDs)init功能的底部和初始化您menu财产(以避免另一个编译器警告,使用自其初始化之前)。

+1

非常好的时机。我在弄清楚什么是错误的代码,并且决定为了简化它而对元组进行typealias。做了你所做的所有修复,它确实编译:D谢谢! – TheBrownCoder

+0

这就像宇宙连接了我们第二个^ _ ^ – dangnabit