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

时间:2015-02-12 03:16:05

标签: function swift xcode6

我想更改函数调用的数组值。

调用函数的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])          
        }
}

我有一个错误:' @lValue $ T5'当我想改变我的f [rows] = 0.0

时,它与' Float'不同

有任何建议吗?

2 个答案:

答案 0 :(得分:2)

这是因为f参数是immutable array。您可以使用函数签名将此更改为mutable array参数,如下所示

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 :(得分:1)

f array不可变。您需要传递f数组as inout parameter

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

然后你可以这样打电话给calculateBoundary

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