func removing (item: Int, fromArray: [Int]) -> [Int] {
for i in 0...fromArray.count-1 {
if fromArray[i] == item {
let index = i
fromArray.remove(at: index) // Error : cannot use mutating member on immutable value : 'fromArray' is a 'let' constant
}
}
return fromArray
}
var anarray : [Int] = [1, 2,3, 4 ,3]
var x = 3
removing(item: x, fromArray: anarray)
回答
那麼,你也有一個從數組中刪除元素,然後超出其界限的問題。試試這樣:
func removeInPlace(item: Int, fromArray: inout [Int]) -> Void {
for i in stride(from: fromArray.count - 1, to: 0, by: -1)
{
if fromArray[i] == item {
fromArray.remove(at: i)
}
}
}
var anarray : [Int] = [1, 2,3, 4 ,3]
var x = 3
print(anarray) // prints [1, 2, 3, 4, 3]
removeInPlace(item: x, fromArray: &anarray)
print(anarray) // prints [1, 2, 4]
你會想要額外的錯誤處理,但希望這有助於你的方式。
如果你想修改的方法中的方法參數,你可以使用inout
關鍵字聲明(見the docs):
func removing(item: Int, fromArray: inout [Int]) -> [Int]
{
...
}
沒有inout
關鍵字,所有的方法參數是恆定的值。
默認情況下,swift中的參數是常量,但是如果你想在函數中對它進行變異,那麼它需要在inout變量中。您可以通過指定的參數作爲INOUT作爲
func removing (item: Int, fromArray : inout [Int]) -> [Int]
您所看到的錯誤是遵循在試圖從只讀數組刪除一個數組值實現它。也就是說,fromArray
是隻讀的,因此是不可變的。你有兩個選擇。
選項#1:
func removing (item: Int, fromArray: inout [Int]) {
for i in 0...fromArray.count-1 {
if fromArray[i] == item {
let index = i
fromArray.remove(at: index) // Error : cannot use mutating member on immutable value : 'fromArray' is a 'let' constant
}
}
}
選項#2:爲的就是使用功能,而是照搬通過添加inout
給它,並傳回什麼使輸入陣列讀寫陣列成一個新的:
func removing (item: Int, fromArray: inout [Int]) {
var newArray = fromArray
for i in 0...newArray.count-1 {
if newArray[i] == item {
let index = i
newArray.remove(at: index)
}
}
return newArray
}
除非inout
所示,傳遞到功能在夫特總是隻讀的任何參數。
VAR anarray:[INT] = [1,2,3,4,3] 變種X = 3 打印( 「\(除去(項目:X,fromArray:&anarray))」) //當我添加了'inout',並且我得到了致命錯誤「索引超出範圍」 –
這是一個非常不同的錯誤。讓我檢查一下,然後編輯我的答案。 – dfd
選項3:只需用'anArray = anArray.filter {$ 0!= x}'替換整個東西':) –
- 1. 修改結構時,不能在不可變的值錯誤上使用變異成員
- 2. Swift 2在協議擴展中使用變異函數的錯誤「不能在不可變的值上使用變異成員:'self'是不可變的
- 3. 不能在類型'String'的不可變值上使用變異成員
- 4. 如何解決Swift 3錯誤'不能在不可變值上使用變異成員:'loadedPost'只獲取屬性'?
- 5. 錯誤:請求成員的東西不是在這個代碼
- 6. 類協議:不能一成不變值使用可變成員:「自我」是不可改變的
- 7. 無法在一成不變的值使用可變成員的封閉
- 8. 如何用可變成員變量創建不可變類?
- 9. 在下面的代碼中,修改閉包是否有可能存在錯誤?
- 10. 如何修復下面代碼的路由錯誤?
- 11. 如何將這個不可變成員的非功能性scala代碼轉換爲優雅的解決方案?
- 12. 如何在我的PHP代碼中修復這個分析錯誤?
- 13. 在下面的代碼中可能導致分段錯誤?
- 14. 不可變的類型只有變異成員
- 15. 如何在進行線性迴歸時修復「可變長度差異」錯誤
- 16. 在代碼後面使用javascript變量賦值C#變量值
- 17. 如何修復我的代碼變量在python類中?
- 18. 爲什麼我不能在這個成員函數中設置這個成員變量?
- 19. 如何修復生成代碼中的錯誤
- 20. 如何在代碼控制器中訪問不同函數的成員變量
- 21. 類型[AnyObject]的不可變值只有名爲'removeAtIndex'的變異成員
- 22. 不可變的值類型[字符串]只有變異的成員名爲append
- 23. Swift 2.0 - 錯誤:類型'[String]'的不可變值只有名爲'append'的變異成員
- 24. 如何調用在MySQL中值,則變成一個可變
- 25. 任何人都可以請在下面的SQL代碼糾正這個錯誤?
- 26. Swift2 GeneratorOfOne.next()出現錯誤:無法使用不可變值可變成員:函數調用返回不可變的值
- 27. 如何使用可變成員Vec?
- 28. 在akka/scala中訪問演員之外的不可變成員
- 29. 如何在返回小數值時修復這個preparedStatement錯誤?
- 30. 訪問一成不變的方法,而迭代一個可變成員
向上投票。我收到了關於超越界限的評論,而與OP不同的問題,我會指出他的答案。 – dfd