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

隐式展开的可选使不可变

拓拔辰钊
2023-03-14
问题内容

为什么无法对隐式解包的可选变量进行突变?

这是一个重现问题的简短示例:

var list: [Int]! = [1]
list.append(10) // Error here

Immutable value of type '[Int]' only has mutating members named 'append'

带整数

var number: Int! = 1
number = 2
number = 2 + number
number += 2 // Error here

Could not find an overload for '+=' that accepts the supplied arguments


问题答案:

更新:

Xcode Beta 5中的一个小警告已解决此问题:

var list: [Int]! = [1]
list.append(10)

var number: Int! = 1
number! += 2
number += 2 // compile error

该数组可以按预期工作,但是现在看来整数仍然需要显式拆包以允许使用 +=

当前,这仅仅是Optionals的本质(无论是否隐式解包)。unwrap运算符返回一个不变的值。这可能是固定的,或者将来会提供更好的解决方案

目前唯一的解决方法是将数组包装在一个类中:

class IntArray {
    var elements : [Int]
}


 类似资料:
  • 在Swift 4.0中,以下代码不可编译: 现在我想象是

  • 问题内容: 在Xcode 8发行版中,我发现了一个奇怪的场景。 这是代码, 结果如下: 上面的这些表明,当我为没有显式类型的变量分配一个 隐式解包的optional时 ,该类型将被推断为一个可选类型,而不是它最初的类型,也就是 隐式解开的optional 。 我的Xcode已更新至8。任何人都可以验证Xcode 7.x中的行为吗? 更改是由于Swift版本更改还是Xcode? 问题答案: 这是SE

  • 如果像Apple在Swift编程中所说的隐式展开选项应该总是有一个值,那么为什么不使用非选项来代替呢?我知道非选项不能赋值为nil,但还有其他区别吗?

  • 所以我问了这个问题,看起来原因是 之所以不起作用,是因为操作符采用了inout参数,而隐式取消包装的选项不是。然而,在 操作符与隐式unwrapped选项一起工作,这意味着二进制操作符不需要inout参数。所以我的问题是,为什么一元运算符和二元运算符有不同的参数要求?对我来说,能够使用Int似乎有点傻

  • 我正在学习Swift,我对隐式展开选项有疑问。 我有一个返回字符串可选的函数: 以及执行安全展开的if语句,它使用隐式展开可选作为其常量: 在第一行中,apt按照应有的方式展开(结果窗格显示“404”),但在其他两行中,apt没有展开:结果窗格和控制台都显示打印的值是可选的(“404”)和找到的公寓:可选(“404”),为了让404出现在控制台上,我必须使用!符号,如果我理解正确,它只需要手动展开

  • 我有一个ViewController类和我从Storyboard创建的两个IBOutture Uilablel。 下面是类的代码: 下面是另一个类(TableViewController)的代码: 我得到的错误是: 因此,是。我不知道为什么。