Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在swift中的for循环中使用闭包?_Ios_Swift - Fatal编程技术网

Ios 如何在swift中的for循环中使用闭包?

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 = "

我有一系列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;
            }
        }
for(变量i=0;i<30;i++){
chapterOnePanel.chapters[i].onClickListener={
(x:Float32,y:Float32)英寸
设r=i+1;
self.ChapterLoad=“1”;
自水平荷载=管柱(r);
self.loadLevel=true;
}
}
如您所见,我在循环中使用II+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