在关闭内部调用Swift Closure

joh*_*doe 16 ios swift

我有以下代码:

  twitterAPI?.verifyCredentialsWithUserSuccessBlock({ (userName, password) -> Void in


            twitterAPI?.getUserTimelineWithScreenName(userName, count: 100, successBlock: { ([AnyObject]!) -> Void in



                }, errorBlock: { (error :NSError!) -> Void in

            })



            }, errorBlock: { (error :NSError!) -> Void in

                println("error block")
        })
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

在此输入图像描述

我尝试在外封闭内部说自己,但它没有用.我错过了什么?

更新:仍有构建错误:

在此输入图像描述

更新:如果我将getUserTimeline方法放在闭包之外,那么它可以工作.这一个工作.

//        twitterAPI?.getUserTimelineWithScreenName("", successBlock: { (objects :[AnyObject]!) -> Void in
//            
//            }, errorBlock: { (error: NSError!) -> Void in
//        
//        })
Run Code Online (Sandbox Code Playgroud)

但这不是:

twitterAPI?.verifyCredentialsWithUserSuccessBlock({ (userName, password) -> Void in


    self.twitterAPI?.getUserTimelineWithScreenName("", successBlock: { (objects :[AnyObject]!) -> Void in

        }, errorBlock: { (error: NSError!) -> Void in

    })



    }, errorBlock: { (error :NSError!) -> Void in


})
Run Code Online (Sandbox Code Playgroud)

更新:getUserTimeLine方法的定义

self.twitterAPI?.getUserTimelineWithScreenName(<#screenName: String!#>, successBlock: <#(([AnyObject]!) -> Void)!##([AnyObject]!) -> Void#>, errorBlock: <#((NSError!) -> Void)!##(NSError!) -> Void#>)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

更新:现在,我收到一个构建错误,说错过了自己的参数.我甚至没有使用那个构造函数.

 if let twitterAPI = self.twitterAPI {

            twitterAPI.verifyCredentialsWithUserSuccessBlock({ (userName, password) -> Void in

                twitterAPI.getUserTimelineWithScreenName(userName, successBlock: { (objects :[AnyObject]!) -> Void in

                    }, errorBlock: { (error :NSError!) -> Void in

                })


                }, errorBlock: { (error :NSError!) -> Void in

            })

        }
Run Code Online (Sandbox Code Playgroud)

dan*_*ard 1

好的,根据您使用的方法名称,我猜您正在使用STTwitter库。如果是这样的话,你会想要这样的东西:

    if let twitterAPI = self.twitterAPI {
        twitterAPI.verifyCredentialsWithSuccessBlock({ (String) -> Void in
            twitterAPI.getUserTimelineWithScreenName("test", successBlock: { (objects: [AnyObject]!) -> Void in
                println("success")
                }, errorBlock: { (error: NSError!) -> Void in
                    println("failure")
            })
            }, errorBlock: { (error: NSError!) -> Void in

        })
    }
Run Code Online (Sandbox Code Playgroud)

请注意使用可选变量之前的 le​​t 调用self.twitterAPI