无法调用 'subscript' 错误
Cannot invoke 'subscript' error
我正在尝试使用从 this blog 借来的函数。这是该函数:
func shuffleArray<T>(array: Array<T>) -> Array<T>
{
for var index = array.count - 1; index > 0; index--
{
// Random int from 0 to index-1
var j = Int(arc4random_uniform(UInt32(index-1)))
// Swap two array elements
// Notice '&' required as swap uses 'inout' parameters
swap(&array[index], &array[j])
}
return array
}
但是,当我尝试声明它时,交换行出现错误 - 无法使用类型为“(inout inout $T6, inout inout $T11)”的参数列表调用 'subscript'。
导致错误的原因是什么?
函数shuffleArray
的第一个参数需要是inout
参数:
func shuffleArray<T>(inout array: Array<T>)
inout 参数表示变量通过引用而不是值传递。换句话说,函数 shuffleArray
正在对基础对象 array
进行更改,而不是它的副本。也就是说,您可以删除 shuffleArray
的 return 值,因为由于变量是通过引用传递的,无论您传入什么都会被函数改变。
你的最终函数应该是这样的:
func shuffleArray<T>(inout array: Array<T>)
{
for var index = array.count - 1; index > 0; index--
{
var j = Int(arc4random_uniform(UInt32(index-1)))
swap(&array[index], &array[j])
}
}
现在,当您将数组传递给函数时,请使用 &
语法。
func shuffleArray(&array)
编辑:您还可以将第一个参数声明为变量并保留 return 值:
func shuffleArray(var array: Array<T>) -> Array<T>
我正在尝试使用从 this blog 借来的函数。这是该函数:
func shuffleArray<T>(array: Array<T>) -> Array<T>
{
for var index = array.count - 1; index > 0; index--
{
// Random int from 0 to index-1
var j = Int(arc4random_uniform(UInt32(index-1)))
// Swap two array elements
// Notice '&' required as swap uses 'inout' parameters
swap(&array[index], &array[j])
}
return array
}
但是,当我尝试声明它时,交换行出现错误 - 无法使用类型为“(inout inout $T6, inout inout $T11)”的参数列表调用 'subscript'。
导致错误的原因是什么?
函数shuffleArray
的第一个参数需要是inout
参数:
func shuffleArray<T>(inout array: Array<T>)
inout 参数表示变量通过引用而不是值传递。换句话说,函数 shuffleArray
正在对基础对象 array
进行更改,而不是它的副本。也就是说,您可以删除 shuffleArray
的 return 值,因为由于变量是通过引用传递的,无论您传入什么都会被函数改变。
你的最终函数应该是这样的:
func shuffleArray<T>(inout array: Array<T>)
{
for var index = array.count - 1; index > 0; index--
{
var j = Int(arc4random_uniform(UInt32(index-1)))
swap(&array[index], &array[j])
}
}
现在,当您将数组传递给函数时,请使用 &
语法。
func shuffleArray(&array)
编辑:您还可以将第一个参数声明为变量并保留 return 值:
func shuffleArray(var array: Array<T>) -> Array<T>