Arrays 无法在“self”中分配给“”-在Swift中使用元组
我必须学习两门课程:FirstViewController和PlanGenerator PlanGenerator有一个名为getPlanForIndex day的方法:Int->[PlanElement],[PlanElement]?。它返回两个不同的数组,都包含Plan元素的对象 在FirstViewController中,我创建了两个属性:Arrays 无法在“self”中分配给“”-在Swift中使用元组,arrays,swift,tuples,Arrays,Swift,Tuples,我必须学习两门课程:FirstViewController和PlanGenerator PlanGenerator有一个名为getPlanForIndex day的方法:Int->[PlanElement],[PlanElement]?。它返回两个不同的数组,都包含Plan元素的对象 在FirstViewController中,我创建了两个属性: let plan:[PlanElement] = [PlanElement]() let planGen:PlanGenerator = PlanGe
let plan:[PlanElement] = [PlanElement]()
let planGen:PlanGenerator = PlanGenerator()
FirstViewController作为一个名为:
func prepareView () {
plan = planGen.getPlanForIndex(dayIndex)
}
但当我想调用此函数时,会收到错误消息:
无法在“self”中分配给“plan”首先,您的计划成员是一个用let声明的常量,您正在init外部分配给它。如果您想在初始化后分配给它,则需要使用var声明它
另外,getPlanForIndex返回一个元组,并将其分配给singular not tuple类型的成员。如果只想指定元组的一部分,请按如下方式执行:
(plan, _) = planGen.getPlanForIndex(dayIndex)
将一个元组分配给一个元组,使编译器满意,但丢弃第二个元素
相反,如果您希望plan是一个元组,则必须声明并初始化它。从评论中看,似乎你找到了一种方法,但这里有一种方法,可以减少键入单词的次数:
var plan: ([PlanElement], [PlanElement]) = ([], [])
一旦声明了数组的类型,[]将被理解为该类型的空数组。只是var plan=[],[]使类型不明确。首先,您的计划成员是一个用let声明的常量,您将在init之外分配给它。如果您想在初始化后分配给它,则需要使用var声明它
另外,getPlanForIndex返回一个元组,并将其分配给singular not tuple类型的成员。如果只想指定元组的一部分,请按如下方式执行:
(plan, _) = planGen.getPlanForIndex(dayIndex)
将一个元组分配给一个元组,使编译器满意,但丢弃第二个元素
相反,如果您希望plan是一个元组,则必须声明并初始化它。从评论中看,似乎你找到了一种方法,但这里有一种方法,可以减少键入单词的次数:
var plan: ([PlanElement], [PlanElement]) = ([], [])
一旦声明了数组的类型,[]将被理解为该类型的空数组。只是var plan=[],[]使类型不明确。Ok,那么如何将这两个数组分配给plan?我想我应该在声明中这样做:var plan:[PlanElement],[PlanElement]=但是现在该做什么呢?实际上这取决于您计划使用plan的目的和时间。如果希望它包含两个数组的元组,并且不打算在prepareView方法运行之前使用它,可以使用两个空数组的元组[]、[]对其进行初始化。或者将其设置为可选,以便更严格地跟踪是否已初始化。是的,在prepareView之前我不使用它。但是如果我像var plan=[],[]那样操作,我会在plan=planGen.getPlanForIndexdayIndex行中得到一条错误消息,它表示无法表示元组转换“[PlanElement],[PlanElement]”到“NSArray,NSArray”。所以我最终修复了它:var plan:[PlanElement],[PlanElement]=[PlanElement],[PlanElement]好的,那么我如何将这两个数组分配给plan呢?我想我应该在声明中这样做:var plan:[PlanElement],[PlanElement]=但是现在该做什么呢?实际上这取决于您计划使用plan的目的和时间。如果希望它包含两个数组的元组,并且不打算在prepareView方法运行之前使用它,可以使用两个空数组的元组[]、[]对其进行初始化。或者将其设置为可选,以便更严格地跟踪是否已初始化。是的,在prepareView之前我不使用它。但是如果我像var plan=[],[]那样操作,我会在plan=planGen.getPlanForIndexdayIndex行中得到一条错误消息,它表示无法表示元组转换“[PlanElement],[PlanElement]”到“NSArray,NSArray”。所以我最终修正了它:var plan:[PlanElement],[PlanElement]=[PlanElement],[PlanElement]