Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.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
Arrays 无法在“self”中分配给“”-在Swift中使用元组_Arrays_Swift_Tuples - Fatal编程技术网

Arrays 无法在“self”中分配给“”-在Swift中使用元组

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

我必须学习两门课程:FirstViewController和PlanGenerator

PlanGenerator有一个名为getPlanForIndex day的方法:Int->[PlanElement],[PlanElement]?。它返回两个不同的数组,都包含Plan元素的对象

在FirstViewController中,我创建了两个属性:

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]