我是Swift的新手,现在还不懂。
我想要做的是创建一个不等于leegRectY
的变量。 leegRectY
中有一个yGrid[]
。所以我创建变量randomm
并继续这样做,直到它不等于leegRectY
。但是当我想要返回时randomm
Xcode表示还没有确定。但我已经确定了randomm
我知道我做错了什么,所以请善待; - )
由于
func getRectY() -> CGFloat {
let yGrid:Array = [(CGRectGetMaxY(frame)/4 * 0),
(CGRectGetMaxY(frame)/4 * 1),
(CGRectGetMaxY(frame)/4 * 2),
(CGRectGetMaxY(frame)/4 * 3)]
for(var i=0; i < 1000; i++){
var randomm = yGrid[Int.random(0...3)]
if leegRectY != randomm { break }
}
return CGFloat(randomm) // XCODE: Use of unresolved identifier 'randomm'
}
修改
变量仅在此函数中定义,或者仅在for循环中定义。因此,当我在循环之前放置var randomm = 0
时,值不会从nil变化。也许这对你来说是有用的信息......
答案 0 :(得分:0)
&#34;身体&#34; for-statement是一个&#34;代码块&#34;
{ statements... }
和Swift(以及许多其他编程语言) 变量只有&#34;有效&#34;在他们的代码块里面 宣布。更确切地说,变量的范围的范围从其声明到 声明它的最近的封闭代码块的结尾。
在您的情况下,var randomm
在代码块中声明
for-statement,并且在该块之外是未知的。
您必须在函数范围内声明变量:
func getRectY() -> CGFloat {
// ...
var randomm = CGFloat(0.0)
for (var i=0; i < 1000; i++){
randomm = yGrid[Int.random(0...3)] // <-- no "var" here !!!
if leegRectY != randomm { break }
}
return randomm
}
或者可能稍微简单一些:
func getRectY() -> CGFloat {
// ...
var randomm : CGFloat
do {
randomm = yGrid[Int.random(0...3)]
} while leegRectY == randomm
return randomm
}