当前位置: 首页 > 面试题库 >

Swift-在结构对象上进行迭代时如何使其变形

富辰阳
2023-03-14
问题内容

我仍然不确定结构复制或引用的规则。

我想在从数组中迭代结构对象时对其进行突变:例如,在这种情况下,我想更改背景颜色,但是编译器对我大吼大叫

struct Options {
  var backgroundColor = UIColor.blackColor()
}

var arrayOfMyStruct = [MyStruct]

...

for obj in arrayOfMyStruct {
  obj.backgroundColor = UIColor.redColor() // ! get an error
}

问题答案:

struct是值类型,因此在for循环中您正在处理副本。

就像测试一样,您可以尝试以下操作:

斯威夫特3:

struct Options {
   var backgroundColor = UIColor.black
}

var arrayOfMyStruct = [Options]()

for (index, _) in arrayOfMyStruct.enumerated() {
   arrayOfMyStruct[index].backgroundColor = UIColor.red
}

斯威夫特2:

struct Options {
    var backgroundColor = UIColor.blackColor()
}

var arrayOfMyStruct = [Options]()

for (index, _) in enumerate(arrayOfMyStruct) {
    arrayOfMyStruct[index].backgroundColor = UIColor.redColor() 
}

在这里,您只需枚举索引,然后直接访问存储在数组中的值。

希望这可以帮助。



 类似资料:
  • 问题内容: 假设我正在遍历Java中的Map …我不清楚在遍历该Map的过程中我可以做什么。我猜我在Javadoc中对于Iterator接口remove方法的警告大多感到困惑: […]如果在迭代进行过程中以其他方式(而不是通过调用此方法)修改了基础集合,则未指定迭代器的行为。 我知道我可以毫无问题地调用remove方法。但是,在遍历Map集合时,我可以: 使用Map类put方法更改与键关联的值(使

  • 问题内容: 我正在尝试遍历: …并提取中的每个元素。这是我的方法: 这里的问题是对的每次调用都会从中删除元素,从而修改其大小,从而导致以下错误: 那么…当元素动态变化时,我该如何遍历其中的元素呢? 问题答案: 其他人则提到了正确的解决方案,而没有实际阐明。所以这里是: 另外,如果您想安全地在assign函数中更改映射,则需要传入迭代器(只能使用remove函数,并且只能使用一次)或条目来更改值。

  • 问题内容: 我有一个(实际上,我使用的是更复杂的POJO,但是为了我的问题而简化了它) 好像 : 我如何遍历此地图,打印出密钥,然后打印人名,然后打印人年龄,例如: A是Map < String ,Person> 的键 B是Person.getName()的名称 C是Person.getAge()的年龄 我可以使用.values()从地图中提取所有值,如HashMap文档中所述,但是我不确定如何获

  • 通过一个简单的数组,我可以使用标准的循环来实现: 但是如何用实物来做呢?

  • 我想按属性对对象列表进行分组,然后使用(Key,Value)对迭代结果。 我在Java8中找到了用一个属性对对象列表进行分组的方法,如下所示 但结果将只有条目集(在entrySet属性中有值)。键集和值集将具有空值。我想迭代如下内容

  • 假设我想按x坐标对数组进行排序。 我怎么才能做到这一点?