不能使用.remove(at:)

时间:2017-06-02 07:50:26

标签: swift

var bigNum = [2,34,5].remove(at: 2)

错误:

  

Playground执行失败:错误:CalculatorPlayGround.playground:35:14:错误:无法对类型为'[Int]'的不可变值使用mutating成员   var bigNum = [2,34,5] .remove(at:2)

但是

var bigNum = [2,34,5]
var b = bigNum.remove(at: 2)

没问题。

有什么区别?为什么它适用于第二种情况?

2 个答案:

答案 0 :(得分:2)

constant尝试 mutate 您调用它的数组。

当您像第一个示例(let array = [2, 34, 5] //not mutable )中那样创建数组时,它会创建一个不可变的 var array = [2, 34, 5] //mutable ,就好像您要创建它一样:

bigNum

如果强制它将数组创建为变量,则 可变:

bigNum

注意

我不确切地知道你要做什么,但是[2, 34]让我假设你正在尝试从阵列中获取一个数字?因为现在,fieldset legend { text-align: center; padding: 0 10px; } .table-wrap { width: 100%; table-layout: fixed; } .table-wrap > tr > td { width: 50%; } .table-wrap table { width: 100%; } .table-wrap table .element { position: relative; } .table-wrap table .element:after { content: ''; position: absolute; left: 0; bottom: 2px; width: 100%; border-bottom: 1px dotted #000; } .table-wrap table .element .item { position: relative; background-color: #FFF; padding: 2px; z-index: 1; top: 2px; } .table-wrap table .element .price { position: absolute; right: 0; background-color: #FFF; padding: 2px; z-index: 1; }将成为此数组:<fieldset> <legend>Standard deduction table</legend> <table class="table-wrap"> <tr> <td> <table> <tr> <td> <div class="element"> <span class="item">Single (cannot be claimed)</span><span class="price">$ 8,000</span> </div> </td> </tr> <tr> <td> <div class="element"> <span class="item">Head of household</span><span class="price">$ 11,200</span> </div> </td> </tr> </table> </td> <td> <table> <tr> <td> <div class="element"> <span class="item">Qualifying window</span><span class="price">$ 16,050</span> </div> </td> </tr> <tr> <td> <div class="element"> <span class="item">Married filing seperate returns</span><span class="price">$ 8,000</span> </div> </td> </tr> </table> </td> </tr> </table> </fieldset>而不仅仅是数字。

答案 1 :(得分:1)

[2,34,5]本身就是 literal ,因此在Swift中是不可变的(即你不能写[2,34,5].remove(at: 2))。要应用变异函数,首先需要使用var关键字将数组存储在可变容器中:

var bigNum = [2,34,5]

只有在这样做之后,您才可以在可变bigNum上使用变异功能.remove(at:)