为什么增加i
值的函数会给我一个错误:
无法将不可变值传递给变异运算符:' i'是一个“让...” 恒定
这是我的代码:
import UIKit
/* initialising the struct to store values in array and change them
with function*/
struct DayMenu {
/* declaring the variables of menu for breakfast, lunch and dinner*/
let breakfast = "egg"
let lunch = ["orange", "apple", "meat"]
let dinner = ["veggi", "juice", "pasta"]
/* creating a function which changes the value by increasing the index
of the array by 1*/
func showMenu(_:String, _:String, _:String)->String {
var i:Int=0
for i in 0...dinner.count {
for i in 0...lunch.count {
return lunch[i]
dinner[i]
i++
/* increasing the index by 1*/
error Cannot pass immutable value to mutating operator: i is a 'let'
constant*/
}}}}
let dinnerForToday = DayMenu()
let whatToEat = dinnerForToday.showMenu
答案 0 :(得分:1)
使用while
代替for
您无法更改i
这是一个迭代器。
var i:Int = 0
在您的代码中无用
Swift中没有使用i++
。使用i += 1
对两个循环使用错误的i
键。例如,使用i
和j
。
样品:
//external loop
var i = 0
while i < dinner.count {
i += 1
//your logic
//internal loop
var j = 0
while j < lunch.count {
j += 1
//you logic
}
}
答案 1 :(得分:0)
抱歉,您的方法showMenu
很乱。
您无法增加for
循环的索引变量,这是错误消息所说的内容。
但关键是你必须增加for
循环的索引变量,因为for
循环会自动执行。
如果您需要使用不同的增量步骤,请使用stride
。
其他问题:
在代码中,甚至在运行时都没有达到增量行,因为您将在退出方法时返回第一个午餐。
外部重复循环无意义
顺便说一下,没有参数标签的三个参数未使用。
您的语法for i in 0...dinner.count
可能会导致异常,例如,在一个数组中,一个项目的范围为0...1
(2个索引),但只有一个项目。
缺少方法末尾的返回值。
您的方法使用此语法编译
func showMenu() -> String {
for i in stride(from: 0, to: dinner.count, by: 2) {
for j in stride(from: 0, to: lunch.count, by: 2) {
return lunch[j]
// dinner[i]
}
}
return ""
}
然而在实践中,该方法只是这样做:
func showMenu() -> String {
return lunch[0]
}