我想更改函数调用的数组值。
调用函数的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'不同有任何建议吗?
答案 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) }