gpt4 book ai didi

ios - 如何快速创建不可变数组的可变副本?

转载 作者:IT王子 更新时间:2023-10-29 05:16:47 25 4
gpt4 key购买 nike

既然 Swift 的数组由于全值语义而真正不可变,我如何创建不可变数组的可变副本?类似于 Obj-C mutableCopy()。我当然可以将数组向下转换为 NSArray 并使用 mutableCopy() 但不想使用 NSArray 因为它不是严格类型化的。

我有一个工具栏,其中包含 Storyboard 中的。我想从工具栏中删除一个项目并使用 toolbar.setItems。我想在不转换为 NSArray 的情况下执行此操作,因为这些函数都不采用 NSArray,它们采用 [AnyObject]

显然现在当我调用 removeAtIndex() 时它不起作用,这是正确的。我只需要一个 mutableCopy

简单地分配给 var 对我不起作用并给出 'Immutable value of type [AnyObject]'

var toolbarItems = self.toolbar.items
toolbarItems.removeAtIndex(2) //Immutable value of type [AnyObject]

我正在使用 Beta 3

最佳答案

问题是 self.toolbar.items 是一个隐式解包的可选项([AnyObject] 类型!)并且它们总是不可变的。当您分配给变量 toolbarItems 而没有明确声明其类型时,它也变成了隐式展开的可选,因此也是不可变的。

要解决此问题,请执行以下任一操作:

var toolbarItems:[AnyObject] = self.toolbar.items
toolbarItems.removeAtIndex(2)

或者:

var toolbarItems = self.toolbar.items as [AnyObject]
toolbarItems.removeAtIndex(2)

更新

从 Xcode 6 Beta 5 开始,您可以更新存储在可选变量中的集合,因此原始代码现在可以工作了:

var toolbarItems = self.toolbar.items
toolbarItems.removeAtIndex(2)

关于ios - 如何快速创建不可变数组的可变副本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24721555/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com