我有以下代码:
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方法放在闭包之外,它就能工作。这个可以用。
// twitterAPI?.getUserTimelineWithScreenName("", successBlock: { (objects :[AnyObject]!) -> Void in
//
// }, errorBlock: { (error: NSError!) -> Void in
//
// })但这不是:
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方法的定义
self.twitterAPI?.getUserTimelineWithScreenName(<#screenName: String!#>, successBlock: <#(([AnyObject]!) -> Void)!##([AnyObject]!) -> Void#>, errorBlock: <#((NSError!) -> Void)!##(NSError!) -> Void#>)

更新:现在,我收到一个构建错误,说缺少参数sinceID。我甚至没有使用那个构造函数。
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
})
}发布于 2015-04-11 17:04:37
尝试:
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
})在这种情况下
{ (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 type或Swift - 'Bool' is not a subtype of 'Void'?
发布于 2015-04-08 04:53:50
好的,根据您使用的方法名,我猜您使用的是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
})
}注意在使用可选的self.twitterAPI变量之前的let调用。
发布于 2015-04-13 08:39:44
Swift 4
下面是一个简单的例子。但是最好是通过monad来实现。
...
guard let api = twitterAPI else { return }
api.verifyCredentialsWithUserSuccessBlock({ userName, password in
api.getUserTimelineWithScreenName(
userName,
count: 100,
successBlock: { value in
// success
}) { error in
print("get user error: \(error)")
}
}) { error in
print("verify error: \(error)")
}https://stackoverflow.com/questions/29500055
复制相似问题