Arrays 扩展swift数组--易变性问题

Arrays 扩展swift数组--易变性问题,arrays,swift,Arrays,Swift,我想在Swift数组上创建Swift 4扩展。该函数应将数组排序到位 编译器抱怨似乎假设数组是不可变的,因为它抱怨我创建的函数。我想解决这个问题,但不知道如何解决。请注意,要求是使用sort对数组进行就地排序,而不是像使用sorted那样创建新数组 struct MyStruct { var field: String } typealias MyStructList = [MyStruct] // requirement: extend MyStructList with cust

我想在Swift数组上创建Swift 4扩展。该函数应将数组排序到位

编译器抱怨似乎假设数组是不可变的,因为它抱怨我创建的函数。我想解决这个问题,但不知道如何解决。请注意,要求是使用sort对数组进行就地排序,而不是像使用sorted那样创建新数组

struct MyStruct {
    var field: String
}

typealias MyStructList = [MyStruct]

// requirement: extend MyStructList with custom sort

extension Array where Element == MyStruct {
    func customSort() -> [MyStruct] {
        return sort { $0.field < $1.field } 
    }   
}
编译器抱怨:无法对不可变值使用mutating member:“self”是不可变的

sort是一个可变函数,用于对数组进行适当排序。sortedby:是您正在寻找的功能。将sort重命名为sorted

如果您希望对数组进行适当的排序,那么重写函数声明以包含变异限定符

因此,以下是:

func custom_sort()
变成:

mutating func custom_sort()
变异函数sortby:不返回任何内容,因此您的返回是错误的。同时删除->[MyStruct]。

您想调用sortedby:,它将返回一个新的排序数组实例,而不是sortby:,该实例执行就地排序,从而改变数组

两个问题:

您必须将函数标记为变异 如果要就地排序,则没有返回值

extension Array where Element == MyStruct {
    mutating func customSort() {
        sort { $0.field < $1.field }
    }
}

请命名camelCased的方法/函数。

mutating func customSort:并且不要返回任何mutating func customSort{sort{0.field<$1.field}}感谢您的回答,并正确地指出了我编辑问题的CamelCase。
extension Array where Element == MyStruct {
    mutating func customSort() {
        sort(by: {$0.field < $1.field})
    }
}
extension Array where Element == MyStruct {
    mutating func customSort() {
        sort { $0.field < $1.field }
    }
}