繁体   English   中英

“无法分配”错误迭代结构数组

“Cannot assign to” error iterating through array of struct

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有一系列结构:

struct CalendarDate {
    var date: NSDate?
    var selected = false
}

private var collectionData = [CalendarDate]()

我简单地填写这样的日期:

    for _ in 1...7 {
        collectionData.append(CalendarDate(date: NSDate(), selected: false))
    }

因此,当您点击collectionView时,我只想循环遍历数据并将它们全部标记为False。

    for c in collectionData {
        c.selected = false  ///ERROR: Cannot assign to 'selected' in 'c'
    }

为什么我会收到此错误?

如果我这样做,它工作正常,但我想知道我上面做错了什么:

    for i in 0..<collectionData.count {
        collectionData[i].selected = false
    }
2 个回复

据我所知,迭代器

for c in collectionData

返回collectionData项目的副本 - ( structs是值类型,而不是引用类型,请参阅http://www.objc.io/issue-16/swift-classes-vs-structs.html ),而迭代

for i in 0..<collectionData.count

访问实际值。 如果我是正确的,那么分配给迭代器返回的c是没有意义的......它不会“指向”原始值,而

collectionData[i].selected = false

在迭代中原始值。

一些其他评论员建议

for (var c) in collectionData

但是虽然这允许你分配给c ,它仍然是一个副本,而不是指向原始的指针,虽然你可以修改c ,但collectionData保持不变。

答案是:A)使用最初记录的迭代或B)将数据类型更改为类,而不是结构。

因为默认情况下每个'c'都是let,这是CalendarDate的一个新实例,并且索引处的数组值为for的每一步复制到此,'c'不是指向数组索引的指针只是索引的副本,因此如果为此设置新值,则新值不适用于数组。 但'i'用作数组的索引,可以直接操作数组的值。

1 无法将数组赋给struct属性

我只是在学习C,而且我在向属性( pulses )分配数组时遇到了问题。 我有一个结构: 我使用上面创建的irPulseSet类型创建一个新变量,并定义一个数组: 然后我将该数组分配给irPulseSet结构中的属性。 但是当我编译时,我得到错误: 无效使 ...

2 迭代自定义结构数组的更好方法

这是我的自定义数据结构: 我有一个这样的数据结构数组: 我想要一个函数来返回所有类型的缺席。 我写过这个: 我想知道是否有更好的方法来使用 map、compactMap 或 flatMap 进行迭代。 我是映射数组的新手。 非常感谢任何帮助。 ...

2020-09-04 19:28:33 1 51   swift
3 遍历Class :: Struct对象的数组

我正在使用Class::Struct模块,并具有两个结构Cat和Kitten , Cat是母猫,并且Cat的属性之一应该是Kitten对象的数组。 我很难做到这一点。 如果将kittens数组另存为一个对象,则无法按预期进行迭代。 我只是得到一个带有一个似乎是数组的元素的数组。 如果 ...

2018-04-15 10:09:31 1 63   perl
4 遍历imput元素以将值分配给数组

下面的代码获取已选择上载的文件列表。 它基本上将div内的输入元素附加到表单元素上方: 单击提交按钮后,如何将所有属性名称存储在一个数组中-fileNamesArray-? 我尚未尝试检查是否可行: //尝试开始 //我的方法://如果没有选择要上传的文件并单击“ ...

5 通过向量中的结构的成员迭代错误

我的.h文件中有一个结构和两个向量: 我已经读过一个文件,以将值填充到m_xterms和m_yterms,并且我试图遍历这些值: 尽管我可以肯定我的逻辑有误,但是我目前收到错误Error表达式必须具有指针类型。 坚持了一段时间,谢谢。 ...

6 遍历执行 switch 语句的数组返回 TypeError:无法分配给对象“#”的只读属性“位置” '

我有一个只读数组,我将其复制为可变数组let mutableForecast = [...forecast]我正在获取该新数组并使用forEach对其进行迭代,以便我可以对数组进行变异。 我试图通过switch语句使用一些流控制,但我得到了TypeError: Cannot assign to re ...

7 PHP迭代数组错误

我对以下代码有疑问: PHP函数,接受一个数组,递归循环遍历每个级别,如果找到单引号则返回字符串并返回数组。 这是我传递的数据数组: 我调用该函数并将数组传递给它: 我在屏幕上的输出: 数组([customer1] =&gt;数组([fname] =&gt; ...

2014-03-13 22:08:01 1 47   php
8 迭代c中的结构

我正在编写一个与此代码类似的单元测试,我正在尝试在设置它时测试我的值,以便我知道发生了什么。 当我运行以下代码时,我不明白为什么ptr值没有设置为1。 相反,当我运行它时,它给我一个10,64,0,0的输出。 任何解释或建议将不胜感激! ...

9 遍历Struct成员

可以说我们有一个结构 是否可以通过使用foreach来遍历结构的成员? 我已经读过一些东西,但是我不确定如何在这里应用它。 结构中大约有20个变量。 我正在尝试从文件中读取值,并尝试将它们分配给变量,但不想调用file.ReadLine()20次。 我正在尝试通过循环访问 ...

2011-09-30 17:13:30 1 23451   c#
10 通过Struct MATLAB进行迭代

以下是到目前为止的内容。 我需要遍历rxnsBothKaletaS结构的每个字段,其中每个字段代表一个nx4单元格。 我需要从该单元格的第一列中提取信息,并用逗号分隔为单个字符串,然后将其分配给fname字段的索引。 (给出背景信息: fname是基因的名称,每个eaach基因中都是依 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM