高阶函数sort()与其他高阶函数一起使用,它也与let内容一起使用

时间:2019-03-29 07:17:11

标签: ios swift

所以,发生这种情况的任何原因都是因为当时我用let类型执行sort()函数时,xcode给了我编译时错误

我在游戏机中仅使用sort函数,将sort()函数与其他高阶函数一起使用。

像这样

queryPurchaseHistoryAsync

错误:

  

不能在不可变值上使用变异成员:“名称”是一个“ let”常量

但具有其他高阶函数

let name = ["mehul","HeLLi","JeniFER","Ankul"]
name.sort()

现在没有错误

4 个答案:

答案 0 :(得分:3)

请考虑 sort sorted

之间的细微但至关重要的区别
  • sort没有返回值。它在适当的位置排序,这意味着调用对象已突变。
  • sorted(以及filtermap)返回带有操作结果的新对象。

答案 1 :(得分:1)

sort函数对集合进行适当排序-即,它修改了您调用name的数组sort

另一方面,

filter返回一个数组,并且不修改原始数组。

sortsorted进行比较,这再次返回一个新数组,并且不修改原始数组。

因此,您可以编写

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:),它将返回新的排序值数组。因此,这里没有任何错误。

相关问题