【发布时间】:2015-03-06 02:16:44
【问题描述】:
我在 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 = "1";
self.LevelLoad = String(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;
}
}
【问题讨论】:
-
“这不起作用”是毫无意义的fladdoodle。应用程序何时崩溃?在哪条线上?用什么信息?
-
如在变量中标记为nil
-
虽然回答了一点,这显然是一个问题:不。 Swift 中没有 final 之类的东西。匿名类,比如 Java,与真正的闭包非常不同。
-
@NJGUY 哪个变量是
nil?你实例化了吗?例如,您是否实例化了chapterOnePanel引用的对象?假设你这样做了,你是否已经实例化了chapters的数组?