以快速奇怪的行为为变量赋值

以快速奇怪的行为为变量赋值,第1张

概述我有以下简单的代码段: 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] 我有以下简单的代码段:

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 Playground.

第二种方式是正确的方式,但Xcode有一个错误?
有什么想法吗?

解决方法 这似乎是 *** 场上的一个错误.它在没有问题的项目中工作.

它可以简化(我意识到这可能不是你真正的代码,但它提供了一个更好的方法的好例子):

func swapper(inout arr: [Int]){  (arr[0],arr[arr.count - 1]) = (arr[arr.count - 1],arr[0])}//let myFunctionPointer : (inout [Int])->VoID = swapperlet myFunctionPointer = swapper // There's no real reason for a type herevar x = [1,2,3]myFunctionPointer(&x)println(x)

请注意,将arr放在函数末尾并不是一个好习惯. Swift不返回计算的最后一个值,因此该行根本不做任何事情(但会产生一些混淆).

编辑:实际上,它甚至可以比这更简单(我没有意识到这会工作,直到我尝试它):

func swapper(inout arr: [Int]){  swap(&arr[0],&arr[arr.count-1])}
总结

以上是内存溢出为你收集整理的以快速奇怪的行为为变量赋值全部内容,希望文章能够帮你解决以快速奇怪的行为为变量赋值所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1008463.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存