Swift 将函数赋值给行为异常的变量

Swift 将函数赋值给行为异常的变量,swift,swift-playground,Swift,Swift Playground,我有以下简单的代码段: func swapper(var arr: [Int]) { let first: Int = arr[0] let last: Int = arr[arr.count - 1] arr[0] = last arr[arr.count - 1] = first arr } var myFunctionPointer : ([Int]) -> () = swapper 它工作得很好,但是当我尝试将inout添加到方法参数的签

我有以下简单的代码段:

func swapper(var arr: [Int]) {
    let first: Int = arr[0]
    let last: Int  = arr[arr.count - 1]
    arr[0] = last
    arr[arr.count - 1] = first
    arr
}
var myFunctionPointer : ([Int]) -> () = swapper
它工作得很好,但是当我尝试将inout添加到方法参数的签名时,我无法将其分配给下面这样的外部变量

func swapper(inout  arr: [Int]){
    let first: Int = arr[0]
    let last: Int  = arr[arr.count - 1]
    arr[0] = last
    arr[arr.count - 1] = first
    arr
}
var myFunctionPointer: ([Int]) -> () = swapper // This failed [int] is not subtype of inout [Int]
var myFunctionPointer: (inout[Int]) -> () = swapper // I am not getting a compilation error, but the playground keeps showing an error message and everything stopped working 
我使用的是Xcode 6.1游乐场

第二种方法正确吗?但是Xcode有一个bug?
有什么想法吗?

第二个版本使用了正确的语法

这是一个Xcode错误/问题-我在运行游乐场时重复了
错误
与游乐场服务的通信意外中断
每次我在游乐场中保存时都会收到通知


在使用
inout
时,游乐场似乎出现了问题-我不知道这是否是一个反复出现的问题,但是如果在函数声明中用
var
替换
inout
,并从闭包声明中删除
inout
,它就会工作免责声明:这只是一个游乐场验证测试,不是解决方案

这似乎是游乐场中的一个bug。它在一个项目中工作没有问题

不过,它可以简化(我知道这可能不是您真正的代码,但它提供了一个更好方法的好例子):

请注意,将
arr
放在函数末尾不是一个好做法。Swift不返回计算的最后一个值,因此这一行什么也不做(但会造成一些混乱)


编辑:事实上,它甚至可以比这简单一点(直到我尝试了它,我才意识到这会起作用):


对我来说似乎是一个bug。谢谢你的回答,我很感谢你对代码的建议,关于我在代码末尾放的arr,只是为了在正确的地方看到输出,我想我可能会开始一个关于你建议的方法的新问题,因为老实说,我不理解它是如何工作的。
func swapper(inout arr: [Int]){
  (arr[0], arr[arr.count - 1]) = (arr[arr.count - 1], arr[0])
}

//let myFunctionPointer : (inout [Int])->Void = swapper
let myFunctionPointer = swapper // There's no real reason for a type here

var x = [1,2,3]
myFunctionPointer(&x)
println(x)
func swapper(inout arr: [Int]){
  swap(&arr[0], &arr[arr.count-1])
}