所以,发生这种情况的任何原因都是因为当时我用let类型执行sort()函数时,xcode给了我编译时错误
我在游戏机中仅使用sort函数,将sort()函数与其他高阶函数一起使用。
像这样
queryPurchaseHistoryAsync
错误:
不能在不可变值上使用变异成员:“名称”是一个“ let”常量
但具有其他高阶函数
let name = ["mehul","HeLLi","JeniFER","Ankul"]
name.sort()
现在没有错误
答案 0 :(得分:3)
请考虑 sort 和 sorted
之间的细微但至关重要的区别sort
没有返回值。它在适当的位置排序,这意味着调用对象已突变。sorted
(以及filter
和map
)返回带有操作结果的新对象。答案 1 :(得分:1)
sort
函数对集合进行适当排序-即,它修改了您调用name
的数组sort
。
filter
返回一个数组,并且不修改原始数组。
将sort
与sorted
进行比较,这再次返回一个新数组,并且不修改原始数组。
因此,您可以编写
let sortedNames = name.sorted()
sortedNames
将按顺序排列,而name
将按原始的,未排序的顺序排列。
如果你写
var name = ["mehul","HeLLi","JeniFER","Ankul"]
name.sort()
然后name
将是正确的,因为它被声明为var
而不是let
的常量,所以允许更改。
答案 2 :(得分:1)
sort()基本上可以与列表本身一起使用。它会修改原始列表。返回值为无。
name.sort()
对列表进行排序并保存排序后的列表。
sorted() 适用于可能包含列表,字典等的任何迭代。它返回另一个列表,并且不修改原始列表。 sorted()返回列表的排序副本(新的排序列表),而不更改原始列表。
主题演讲: sort()比 sorted()
答案 3 :(得分:0)
您使用的sort func是变异函数,这意味着sort函数会在内部对同一变量中的数组进行排序。
更改功能::要在特定方法中修改结构或枚举的属性,可以选择对该方法进行行为更改。然后,该方法可以从方法内部对其属性进行变异(即更改),并在方法结束时将其所做的任何更改写回到原始结构中。
所以。 let
不允许sort
进行变异,因此您需要将其设为var。
更多信息,如果您使用sorted(by:),它将返回新的排序值数组。因此,这里没有任何错误。