当前位置: 首页 > 面试题库 >

无法将不变值作为inout参数传递:文字不可变,为什么?

鲜于渊
2023-03-14
问题内容

我想让一个函数交换2个变量!但是对于新的Swift,我不能使用’var’…。

import UIKit

func swapF(inout a:Int, inout with b:Int ) {
    print(" x = \(a) and y = \(b)")
    (a, b) = (b, a)

    print("New x = \(a) and new y = \(b)")
}

swapF(&5, with: &8)

问题答案:

文字不能作为inout参数传递,因为它们本质上是不可变的。

请改用两个变量:

var i=5
var j=8
swapF(a:&i, with: &j)

此外,对于最后的Swift 3快照之一,应将inout放置在类型附近,您的函数原型将变为:

func swapF(a:inout Int, with b:inout Int )


 类似资料:
  • 为什么第一个和第二个写工作,但不是最后一个?有没有办法我可以允许所有3个,并检测它是1,(int)1还是i传入?为什么只允许一个,而允许最后一个?第二个被允许,但不是最后一个,真的让我大吃一惊。 演示显示编译错误

  • 问题内容: 为什么此代码无法编译? 为什么我不能将类变量传递给? 问题答案: 该操作符对引用类型,像,而不是对象,如。您可能想要类似 旁注:如果编写,您的代码将更加简洁 但是,我不确定是否需要某种方法。

  • 问题内容: 我有一个功能。我想知道是否可以使用切片来填充参数列表。 我正在尝试解决以下程序。基本上是模仿一个普通的外壳,该外壳以字符串形式接收命令。 命令功能需要一个参数“列表”,我看不到如何将字符串转换为这样的列表 问题答案: Go编程语言规范 将参数传递给…参数 如果f是最终参数类型为… T的可变参数,则该函数中的参数等效于[] T类型的参数。在f的每次调用中,传递给最终参数的参数是[] T类

  • 从性能还是从其他因素来看,哪一种方法更好? 假设我正在创建一个类,其中有一个方法,它接受2个值并将它们相加在一起。 是有两个实例变量来存储两个值,然后有一个方法来使用这些值更好,还是在调用方法时将变量作为参数传入更好? 或者仅仅使用静态方法更好,这样我就不需要在每次使用该方法时创建对象了?

  • 组件具有变量作为观察者: 当

  • 问题内容: 我希望能够创建如下功能: 这里的问题是,在方法中将其视为,因此是的单个参数,而我希望每个in 都作为新参数传递。由于也是带有可变参数的方法,因此应该可行。 如果这不可能,是否有类似的方法?在那种情况下,我可以先使用一个新数组,然后将其传递给该方法。 问题答案: 可变参数方法的基本类型 是 。Sun以这种方式添加了varargs,以保持向后兼容性。 所以,你应该只能够预先考虑到和呼叫。