Ios 如何在swift中的for循环中使用闭包?
我有一系列swift的按钮。每个按钮都有一个封口。我试图在for循环中使用I作为每个闭包中的值Ios 如何在swift中的for循环中使用闭包?,ios,swift,Ios,Swift,我有一系列swift的按钮。每个按钮都有一个封口。我试图在for循环中使用I作为每个闭包中的值 for(var i = 0; i < 30; i++){ chapterOnePanel.chapters[i].onClickListener = { (x:Float32, y:Float32) in let r = i + 1; self.ChapterLoad = "
for(var i = 0; i < 30; i++){
chapterOnePanel.chapters[i].onClickListener = {
(x:Float32, y:Float32) in
let r = i + 1;
self.ChapterLoad = "1";
self.LevelLoad = String(r);
self.loadLevel = true;
}
}
for(变量i=0;i<30;i++){
chapterOnePanel.chapters[i].onClickListener={
(x:Float32,y:Float32)英寸
设r=i+1;
self.ChapterLoad=“1”;
自水平荷载=管柱(r);
self.loadLevel=true;
}
}
如您所见,我在循环中使用I将I+1存储在r中,然后将r存储在LevelLoad变量中。但这不起作用,应用程序崩溃,LevelLoad被标记为nil。我知道在Java中,必须将r变量声明为final,它才能工作。有没有办法在Swift中做到这一点
下面是GoZoner提供的答案
for(var i = 0; i < 30; i++){
let r = i + 1;
chapterOnePanel.chapters[i].onClickListener = {
(x:Float32, y:Float32) in
self.ChapterLoad = "1";
self.LevelLoad = String(r);
self.loadLevel = true;
}
}
for(变量i=0;i<30;i++){
设r=i+1;
chapterOnePanel.chapters[i].onClickListener={
(x:Float32,y:Float32)英寸
self.ChapterLoad=“1”;
自水平荷载=管柱(r);
self.loadLevel=true;
}
}
这是一个错误:
var data : [(Int) -> ()] = []
for (var i = 0; i < 5; i++) {
data.append { (j:Int) in
println (j + i)
}
}
9> data[0](10)
15 // should be 10
“这不起作用”是毫无意义的活板门。应用程序何时崩溃?在哪条线上?用什么信息?在变量中标记为nilThough来回答一个问题:不,Swift中没有final。匿名类ala Java与真正的闭包非常不同。@n哪个变量是
nil
?你已经实例化了吗?例如,您是否实例化了chapterOnePanel
引用的对象?假设您这样做了,您是否已经实例化了章节数组
?我看到了您描述的相同行为,发布了一个这样的答案,但注意到当我尝试使用OP的代码时,它在这种情况下复制得很好(因此我删除了我的答案,因为在这种情况下它似乎不是问题)。此外,OP现在引用了一个nil
变量的问题,这使我认为这里有一个更简单的问题,即他可能只是未能初始化chapterOnePanel
或chapters
(或类似的东西)。
Welcome to Swift version 1.2. Type :help for assistance.
1> var data : [(Int) -> ()] = []
2.
3. for (var i = 0; i < 5; i++) {
4. let r = i
5. data.append { (j:Int) in
6. println (j + r)
7. }
8. }
data: [Int -> ()] = 5 values {
[0] = ($__lldb_expr2`partial apply forwarder for reabstraction thunk helper from @callee_owned (@unowned Swift.Int) -> (@unowned ()) to @callee_owned (@in Swift.Int) -> (@out ()) at repl1.swift)
...
[4] = ($__lldb_expr2`partial apply forwarder for reabstraction thunk helper from @callee_owned (@unowned Swift.Int) -> (@unowned ()) to @callee_owned (@in Swift.Int) -> (@out ()) at repl1.swift)
}
9> data[0](10)
10
10> data[4](10)
14