无法使用类型为'的参数列表调用'下标'(inout in $ T6,inout in $ T11)

时间:2014-12-01 07:46:00

标签: ios arrays swift

我正在尝试使用NSArray将对象数组随机化为测验应用。每个问题编号包含每个数组。我尝试在ViewDidLoad中添加一个排序,我收到以下错误。

  

“无法使用类型'的参数列表调用'下标'(inout inout   $ T6,inout $ T11)“

我正在使用Swift xCode 6。我是iPhone App Development的初学者。

以下代码:

func shuffleArray<T>(array: Array<T>) -> Array<T>
{

    for var index = array.count - 1; index > 0; index--
    {
        var j = Int(arc4random_uniform(UInt32(index-1)))
        swap(&array[index], &array[j])
    }
    return array
}

3 个答案:

答案 0 :(得分:0)

你的问题是数组是不可变的。你需要做这样的事情:

func shuffleArray<T>(array:Array<T>) -> Array<T> {
    var swapArray = array

    for var index = array.count - 1; index > 0; index-- {
        var j = Int(arc4random_uniform(UInt32(index-1)))

        swap(&swapArray[index], &swapArray[j])
    }

    return swapArray
}

答案 1 :(得分:0)

要在swift中获取输入参数的变量副本,只需将这些参数声明为变量(注意var array):

func shuffleArray<T>(var array: Array<T>) -> Array<T> { 
    for var index = array.count - 1; index > 0; index--
    {
        var j = Int(arc4random_uniform(UInt32(index-1)))
        swap(&array[index], &array[j])
    }
    return array
}

答案 2 :(得分:0)

简单地将您的数组设为func shuffleArray<T>(inout array: Array<T>) -> Array<T> { for var index = array.count - 1; index > 0; index-- { let j = Int(arc4random_uniform(UInt32(index-1))) swap(&array[index], &array[j]) } return array }

&

当你调用你的函数时,你需要将var somet = [[1,2,3]] shuffleArray(&somet) 放在数组变量之前,如下所示:

j

旁注:我将varlet更改为{{1}},因为您没有更改