无法使用类型为 '(inout inout $T6, inout inout$T11) 的参数列表调用 'subscript'
Posted
技术标签:
【中文标题】无法使用类型为 \'(inout inout $T6, inout inout$T11) 的参数列表调用 \'subscript\'【英文标题】:Cannot invoke 'subscript' with an argument list of type '(inout inout $T6, inout inout$T11)无法使用类型为 '(inout inout $T6, inout inout$T11) 的参数列表调用 'subscript' 【发布时间】:2014-12-01 07:46:00 【问题描述】:我正在尝试使用NSArray
为测验应用程序随机化一个对象数组。每个问题编号包含每个数组。我尝试在ViewDidLoad
中添加排序,但出现以下错误。
"不能使用类型为 '(inout inout $T6, inout inout$T11)"
我正在使用 Swift
和 xCode 6
。我是 iPhone 应用开发的初学者。
代码如下:
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
【问题讨论】:
【参考方案1】:您的问题是数组是不可变的。你需要做这样的事情:
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
【讨论】:
【参考方案2】:要快速获取输入参数的可变副本,只需将这些参数声明为变量(注意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
【讨论】:
【参考方案3】:简单地将您的数组设置为inout
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
从 var
更改为 let
因为你没有更改它
【讨论】:
以上是关于无法使用类型为 '(inout inout $T6, inout inout$T11) 的参数列表调用 'subscript'的主要内容,如果未能解决你的问题,请参考以下文章
无法将“Int”类型的值转换为预期的参数类型“(inout UnsafeMutableBufferPointer<_>, inout Int) throws -> Void”
无法使用类型为“(设备:AVCaptureDevice!,错误:inout NSError?)”的参数列表调用类型“AVCaptureDeviceInput”的初始化程序
无法使用类型为“的参数列表”调用“jsonObject”(带有:NSData,选项:JSONSerialization.ReadingOptions,错误:inout NSError?)