Generics 基于泛型的函数不再工作

Generics 基于泛型的函数不再工作,generics,swift,Generics,Swift,此函数在先前版本的Xcode6中工作(声明为array:T[]) func shuffle(数组:[T])->Void{ 对于0..中的i,问题是数组已更改为true值类型。这意味着在分配给新变量或传递给方法时,始终会复制该数组。您试图修改该副本,但最终不会执行任何操作,因此编译器会通过使数组不可变来阻止您 要解决此问题,可以将array定义为inout参数: func shuffle<T>(inout array: [T]) -> Void { 这将允许它在多线程环境中安全

此函数在先前版本的Xcode6中工作(声明为
array:T[]

func shuffle(数组:[T])->Void{

对于0..中的i,问题是数组已更改为true值类型。这意味着在分配给新变量或传递给方法时,始终会复制该数组。您试图修改该副本,但最终不会执行任何操作,因此编译器会通过使
数组
不可变来阻止您

要解决此问题,可以将
array
定义为inout参数:

func shuffle<T>(inout array: [T]) -> Void {

这将允许它在多线程环境中安全工作,并允许将选项传递给您的函数。

由于OP正在修改
数组
,第二个需要是
func shuffle(变量数组:[T])->[T]{
。谢谢@NateCook,我只是假设实现会有所不同,但是你的建议使转换更容易。我更新了我的答案。
func shuffle<T>(inout array: [T]) -> Void {
func shuffle<T>(var array: [T]) -> [T] {