作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
为什么我不能改变隐式展开的可选变量?
这是一个重现问题的简短示例:
var list: [Int]! = [1]
list.append(10) // Error here
“[Int]”类型的不可变值只有名为“append”的可变成员
var number: Int! = 1
number = 2
number = 2 + number
number += 2 // Error here
找不到接受所提供参数的“+=”重载
最佳答案
因为您尝试改变它们的方式是改变值(不可变的)而不是改变 var
。
在 Swift 中,值类型是不可变的。始终如一。
突变不是值的突变,它是包含值的变量的突变。
在Int
的情况下,+=
运算符在左边得到一个结构,在右边得到一个Int,它不能向一个int添加一个结构.
在 Array
的情况下,append
是一个可变成员。但它是在一个不直接存储在变量中的不可变值上调用的。它只能对直接存储在变量中的值进行操作(这就是使它们可变的原因:它们存储在变量中的事实。它们并不是真正可变的,变量是)。
关于swift - 隐式展开可选的不可变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25040174/
我是一名优秀的程序员,十分优秀!