Swift - 更改函数调用的数组值

3

我希望能够改变数组的值以便于调用我的函数。

用于调用calculate函数的ViewController2代码

class ViewController2: UIViewController , UITableViewDelegate, UITableViewDataSource {

var springDisplacement : [Float] {return calculate(forceView2, stiffView2, springNumView2) }

}

计算函数的代码

public func calculateBoundary (f:[Float], s:[Float], n:NSInteger) -> (forceBound1:Float, forceBound2: Float, displacement:[Float]) {

    println("\nForces in the array are")
    for rows in 0...n{
        if(rows==0||rows==n)
        { f[rows] = 0.0 }                
            println(f[rows])          
        }
}

我遇到了一个错误:当我想把f[rows]的值改为0.0时,出现了“'@lValue $T5'与'Float'不同”的错误提示。有什么建议吗?
2个回答

4
这是因为f参数是一个不可变数组。您可以使用以下函数签名将其更改为可变数组参数。
func calculateBoundary (var f:[Float], var s:[Float], n:NSInteger)  -> (forceBound1:Float, forceBound2: Float, displacement:[Float]) { // }

如果你想要修改传递给函数的原始数组,你需要使用 inout 参数。

func calculateBoundary (inout f:[Float],inout s:[Float], n:NSInteger) -> (forceBound1:Float, forceBound2: Float, displacement:[Float]) { // }

您可以这样调用
var f : [Float] = [1.0,2.0]
var g : [Float] = [1.0,2.0]

let result = calculateBoundary(&f, &g, 1)

1

f数组是不可变的。您需要将f数组作为inout参数传递:

 func calculateBoundary (inout f:[Float], s:[Float], n:NSInteger) -> (forceBound1:Float, forceBound2: Float, displacement:[Float]) {...}

然后您可以像这样调用calculateBoundary:
var springDisplacement : [Float] {return calculate(&forceView2, stiffView2, springNumView2) }

var springDisplacement: [Float] {return calculate(&forceView2, stiffView2, springNumView2)} 给我一个错误:'inout [(Float)]' 无法转换为 '[Float]'。我已经声明我的 f 和 forceView2 是 float 类型的数组。 - Terry Chia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接