2017-07-29 30 views
0

我想使用此迭代函數來檢查數組,並將結果與​​新數組一起存儲,然後再次檢查新數組...然而,我不知道如何清除舊的無用數組,以便釋放內存。Swift:在迭代函數中清除數組

func checkEnvironment(environment: [MGLPolygon], seed: MGLPolygon) -> [MGLPolygon]?{ 
    var newEnv: [MGLPolygon]? 
    var alien: MGLPolygon? 
    var check = false 
    for i in 0..<environment.count{ 
     if detectIntersect(poly1: seed, poly2: environment[i]) && check == false{ 
      check = true 
      alien = seed 
      newEnv?.append(alien!) 
     }else{ 
      newEnv?.append(environment[i]) 
     } 
    } 

    if check == false{ 
     // error occurs on here 
     environment.removeAll() 
     return newEnv! 
    }else{ 
     checkEnvironment(environment: newEnv!, seed: alien!) 
    } 
    return nil 
} 
代碼

environment.removeAll() 

獲取說環境是一個讓靜態的,所以我不能改變它的錯誤。我的問題是如何釋放這些數組的內存? 任何幫助將不勝感激。

+0

爲什麼「去除」「檢查」的副作用?也許這個功能需要重新考慮,並分解成單獨的部分 – Alexander

+0

是的,這個功能不工作,我改變它,並滿足新的障礙... https://stackoverflow.com/questions/45392515/swift-return-無法停止功能 – hapmlpy

回答

0

在swift3中,函數參數是不可變的,所以爲了改變你需要添加一個var並賦值給它的值,如下所示。

func checkEnvironment(environment: inout [MGLPolygon], seed: MGLPolygon) -> [MGLPolygon]?{ 
    if check == false{ 
    environment.removeAll() 
    return newEnv! 
    } 
} 
+0

非常感謝! – hapmlpy

+0

@hapmlpy,如果您認爲它有幫助,歡迎您接受我的答案:) –

+0

@HussainShabbir這使局部變量'environment'發生變化,但不會複製它從中複製的數組。您需要使用'inout' – Alexander