所以,背后的任何原因都会发生这种情况,因为当我执行sort()函数时,让我在那个时候使用类型xcode给我一个编译时错误
我在我的操场上尝试了它只有sort函数和sort()函数与其他更高阶函数。
像这样
let name = ["mehul","HeLLi","JeniFER","Ankul"]
name.sort()
错误:
不能在不可变值上使用变异成员:'name'是'let'常量
但与其他更高阶的功能
let nameStartingWithBArray = name.filter {$0.first != "B"}.map {$0.uppercased()}.sorted()
现在没有错误
您正在使用的sort func是变异函数,这意味着排序函数在内部对同一变量中的数组进行排序。
Mutating Func:要修改特定方法中结构或枚举的属性,可以选择改变该方法的行为。然后,该方法可以从方法中改变(即更改)其属性,并且当方法结束时,它所做的任何更改都将写回原始结构。
所以。 let
不允许sort
做变异,所以你需要让它变成var。
更重要的是,如果你使用sorted(by:),它会返回新的排序值数组。所以在这里你没有得到任何错误。
请考虑排序和排序之间的细微但重要的区别
sort
没有回报价值。它排序到位意味着调用对象发生了变异。sorted
(以及filter
和map
)返回一个带有操作结果的新对象。sort
函数对集合进行了排序 - 即它修改了数组name
,你可以在其上调用sort
。
另一方面,filter
返回一个数组,不会修改原始数组。
将sort
与sorted
进行比较,let sortedNames = name.sorted()
再次返回一个新数组并且不会修改原始数组。
所以,你可以写
sortedNames
name
将按顺序排列,而var name = ["mehul","HeLLi","JeniFER","Ankul"]
name.sort()
将按照原始的,未分类的顺序排列。
如果你写
name
然后var
将按顺序排列,因为它被宣布为let
而不是qazxswpoi的常数,所以允许更改。