为什么用隐式解包可选项时,
为什么可选项不像
+=
不能正常工作,例如:var count: Int! = 10
count = count + 10 // This works
count += 10 // this does not work
为什么可选项不像
count = count + 10
这种情况那样隐式解析?
+=
操作符的左侧添加?
,例如count? += 10
。如果count
是一个“常规”的可选类型Int?
,同样适用。如果它的值为nil
,则+=
操作符不会执行任何操作;如果它的值非nil
,则会通过.some(value)
来增加右侧的value
值。 - dfribcount += 10
不起作用。在赋值语句count = count + 10
中,右侧的count
将被视为一个值并被隐式解包(与隐式解包可选项指定的相同)。然而,count += 10
的情况只是对调用+=
函数的简写,提供了对count
值的引用和右侧的副本:(+=)(&count, 10)
。但由于count
是一个隐式解包的可选项,它的(隐式)值是不可变的,这等同于调用(+=)(&(immutable_value_representation), 10)
。 - dfrib