我想转换和现有的,工作目标c应用程序到swift和我有点绊倒与“闭包”。这里的老工作目标C座,使收益来自Web服务的值:如何在iOS Swift中将NSDictionary作为返回类型处理?
- (IBAction)didTapSayHiButton {
[self.meteor callMethodName:@"sayHelloTo" parameters:@[self.username.text] responseCallback:^(NSDictionary *response, NSError *error) {
NSString *message = response[@"result"];
[[[UIAlertView alloc] initWithTitle:@"Meteor Todos" message:message delegate:nil cancelButtonTitle:@"Great" otherButtonTitles:nil] show];
}];
}
所以在这里我得到任何取回一本字典或响应。它的工作原理。 这里就是我正在努力去了解这个与SWIFT(方法略有不同):
@IBAction func sayHi(sender : AnyObject) {
var params = [
"name": "Scotty"
]
meteor.callMethodName("sayHi", parameters: params, responseCallback: {
(response: Dictionary<String, String>, error: NSError) in
println("the name recieved back is: \(response)")
})
}
我得到在Xcode中错误:“NSDictionary的不是‘词典’亚型”
通过快速阅读本书后,这是我可以做的最好的教育尝试。我试了一些其他的东西,但每个都导致了另一种类型的错误。
我该如何使用swift工作?
编辑:我刚刚使用Dictionary
和Dictionary<String, String>
我也应该注意到,我使用的是桥接报访问目标C代码(objectiveDDP)也试过。通过改变方法:这callMethodNamed
是写在客观C作为可以在这里看到:https://github.com/boundsj/ObjectiveDDP/blob/master/ObjectiveDDP/MeteorClient.h#L47
更新
meteor.callMethodName("sayHi", parameters:["scotty"] , responseCallback:nil)
我们能够得到它的工作。但第二个我们尝试添加在闭包中,它开始抛出相同的原始错误。
你有没有试过的NSDictionary替代字典? –
Eugene
@Eugene是的,我也试过Dictionary。我很确定,在迅速的类型必须明确宣布,除非他们可以很容易地暗示。我可能错了,但 –
Scott