2015-02-12 71 views
2

我喜歡爲我的函數調用更改數組值。Swift - 更改函數調用的數組值

代碼爲我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' 不等同於'浮動',當我想改變我的[行] = 0.0

任何建議?

回答

2

這是因爲f參數是immutable array。您可以通過使用函數簽名如下

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

如果你也想修改傳遞給函數的原始陣列此更改爲mutable array參數,你需要使用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 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) } 
+0

'VAR springDisplacement:[浮點] {回報計算(forceView2,stiffView2,springNumView2)}'給我錯誤:'inout [(Float)]'不能轉換爲'[Float]'。我已經聲明我的f和forceView2是float類型的數組。 – 2015-02-12 06:05:08