首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在闭包内部调用Swift闭包

在闭包内部调用Swift闭包
EN

Stack Overflow用户
提问于 2015-04-08 03:49:15
回答 2查看 5.1K关注 0票数 17

我有以下代码:

代码语言:javascript
复制
  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")
        })

我收到以下错误:

我试着在外部闭包中说self,但它不起作用。我遗漏了什么?

更新:仍然有构建错误:

更新:如果我把getUserTimeline方法放在闭包之外,它就能工作。这个可以用。

代码语言:javascript
复制
//        twitterAPI?.getUserTimelineWithScreenName("", successBlock: { (objects :[AnyObject]!) -> Void in
//            
//            }, errorBlock: { (error: NSError!) -> Void in
//        
//        })

但这不是:

代码语言:javascript
复制
twitterAPI?.verifyCredentialsWithUserSuccessBlock({ (userName, password) -> Void in


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

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

    })



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


})

更新: getUserTimeLine方法的定义

代码语言:javascript
复制
self.twitterAPI?.getUserTimelineWithScreenName(<#screenName: String!#>, successBlock: <#(([AnyObject]!) -> Void)!##([AnyObject]!) -> Void#>, errorBlock: <#((NSError!) -> Void)!##(NSError!) -> Void#>)

更新:现在,我收到一个构建错误,说缺少参数sinceID。我甚至没有使用那个构造函数。

代码语言:javascript
复制
 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

            })

        }
EN

回答 2

Stack Overflow用户

发布于 2015-04-11 17:04:37

尝试:

代码语言:javascript
复制
        twitterAPI?.verifyCredentialsWithUserSuccessBlock({ (userName, password) -> Void in
            self.twitterAPI?.getUserTimelineWithScreenName(userName, successBlock: { (objects :[AnyObject]!) -> Void in

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

            return  // <-- ADDED

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

在这种情况下

代码语言:javascript
复制
{ (userName, password) -> Void in
    self.twitterAPI?.getUserTimelineWithScreenName("", successBlock: { (objects :[AnyObject]!) -> Void in
    }, errorBlock: { (error: NSError!) -> Void in
    })
}

是一个“单表达式闭包”,它具有隐式的非Void返回。

从Xcode6.2/ Swift 1.1开始,这里需要显式的return

或者,使用已解决此问题的Xcode 6.3 / Swift 1.2。

查看此问题:One-line closure without return typeSwift - 'Bool' is not a subtype of 'Void'?

票数 4
EN

Stack Overflow用户

发布于 2015-04-08 04:53:50

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

代码语言:javascript
复制
    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

        })
    }

注意在使用可选的self.twitterAPI变量之前的let调用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29500055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档