无法在Swift中分配给'Y'中的'X'

 卿为倾峰888 发布于 2023-01-08 13:08

我有一本字典Structs.我试图分配struct我循环时的值dictionary.斯威夫特告诉我cannot assign to 'isRunning' in 'blockStatus'.我一直没能找到在文档上的任何这种特殊的不变性dictionariesstructs.
直接从操场上:

import Cocoa

struct BlockStatus{
 var isRunning = false
 var timeGapForNextRun = UInt32(0)
 var currentInterval = UInt32(0) 
}

var statuses = ["block1":BlockStatus(),"block2":BlockStatus()]

for (block, blockStatus) in statuses{
 blockStatus.isRunning = true
}

cannot assign to 'isRunning' in 'blockStatus'
blockStatus.isRunning = true

如果我将其更改struct为a,这确实有效class.

我猜它与复制结构并始终引用类的事实有关?

编辑:所以即使它是复制它..为什么我不能改变它?它会给我带来错误的结果,但你可以改变常量的成员而不是常量本身.例如,你可以这样做:

class A {
    var b = 5
}

let a = A()
a.b = 6

Sulthan.. 22

你的猜测是真的.

通过访问blockStatus,您将创建它的副本,在这种情况下,它是一个常量副本(迭代器始终是常量).

这类似于以下内容:

var numbers = [1, 2, 3]

for i in numbers {
   i = 10  //cannot assign here
}

参考文献:

控制流

在上面的示例中,index是一个常量,其值在循环的每次迭代开始时自动设置.

类和结构

值类型是在将其分配给变量或常量时或者传递给函数时复制的类型.[...]所有结构和枚举都是Swift中的值类型

方法

结构和枚举是值类型.默认情况下,无法在其实例方法中修改值类型的属性.

但是,如果需要在特定方法中修改结构或枚举的属性,则可以选择改变该方法的行为.然后,该方法可以从方法中改变(即更改)其属性,并且当方法结束时,它所做的任何更改都将写回原始结构.该方法还可以为其隐式self属性分配一个全新的实例,并且该新实例将在方法结束时替换现有实例.

您可以通过将mutating关键字放在该方法的func关键字之前来选择此行为:


StrangeDays.. 6

您可以使用索引遍历数组

for index in 0..

这应该工作,而不是"无法分配"

2 个回答
  • 您可以使用索引遍历数组

    for index in 0..<statuses.count {
        // Use your array - statuses[index]
    }
    

    这应该工作,而不是"无法分配"

    2023-01-08 13:09 回答
  • 你的猜测是真的.

    通过访问blockStatus,您将创建它的副本,在这种情况下,它是一个常量副本(迭代器始终是常量).

    这类似于以下内容:

    var numbers = [1, 2, 3]
    
    for i in numbers {
       i = 10  //cannot assign here
    }
    

    参考文献:

    控制流

    在上面的示例中,index是一个常量,其值在循环的每次迭代开始时自动设置.

    类和结构

    值类型是在将其分配给变量或常量时或者传递给函数时复制的类型.[...]所有结构和枚举都是Swift中的值类型

    方法

    结构和枚举是值类型.默认情况下,无法在其实例方法中修改值类型的属性.

    但是,如果需要在特定方法中修改结构或枚举的属性,则可以选择改变该方法的行为.然后,该方法可以从方法中改变(即更改)其属性,并且当方法结束时,它所做的任何更改都将写回原始结构.该方法还可以为其隐式self属性分配一个全新的实例,并且该新实例将在方法结束时替换现有实例.

    您可以通过将mutating关键字放在该方法的func关键字之前来选择此行为:

    2023-01-08 13:09 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有