【发布时间】:2017-07-14 06:54:16
【问题描述】:
我正在从 swift 类调用目标 c 中的一个方法。我的目标 c 方法期望 NSNumber 格式的数字。我没有在 swift 中定义数字类型,但我仍然收到以下消息。有没有办法解决这个问题?
- (void)getPercentageMatch:(NSString *)answer listOfAnswers:(NSArray *)validAnswers completionBlock:(void(^)(BOOL isSuccess, NSNumber *percent))completionBlock {
NSMutableDictionary *params = [NSMutableDictionary dictionary];
[params setValue:answer forKey:@"myanswer"];
[params setValue:validAnswers forKey:@"answers"];
NSMutableURLRequest *req = [AuthorizationHandler createAuthReq:@"POST" path:@"validateAnswer" params:params];
AFJSONRequestOperation *op = [[AFJSONRequestOperation alloc] initWithRequest:req];
[op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSDictionary *responseheaders = (NSDictionary *)responseObject;
if (completionBlock) {
completionBlock(true, [responseheaders valueForKey:@"percentage"]);
}
}
failure:^(AFHTTPRequestOperation *operation, NSError *error) {
if (completionBlock) {
completionBlock(false, 0);
}
}];
[op start];
return;
}
我还强制完成块类型转换
as! completionBlock(Bool, NSNumber)
但这不起作用。
我是 swift 新手,任何教程/指针将不胜感激 :)
编辑 1:
当我修改完成块时
let completionBlock = { (isSuccess, percent) in
print("-------", isSuccess, percent)
}
MTRestkitManager.instance().getPercentageMatch(_:text, listOfAnswers:validAnswers, completionBlock:completionBlock)
我没有收到任何错误。但是,如果我再次添加一个轻微的修改,我会得到一个错误。
为什么行为会改变?
编辑 2: 按照科林的解决方案,做了如下改动
@IBAction func submitButtonTapped(_ sender: Any) {
answerTextView.resignFirstResponder()
if answerTextView.textColor == UIColor.lightGray {
ZUtility.showError(NSLocalizedString("Please enter answer before submitting", comment: ""))
return;
}
if answerTextView.text.isEmpty {
ZUtility.showError(NSLocalizedString("Please enter answer before submitting", comment: ""))
setPlaceholderText()
return;
}
let text = answerTextView.text as String
let completionBlock = { (isSuccess, percent:NSNumber) -> (Void) in
self.handleAnswer(isSuccess: isSuccess, percent: Float(percent))
}
MTRestkitManager.instance().getPercentageMatch(_:text, listOfAnswers:validAnswers, completionBlock:completionBlock)
}
在最后一行我收到一个错误:无法将类型 '(Bool, NSNumber) -> (Void)' 的值转换为预期的参数类型 '((Bool, NSNumber?) -> (Void)!'
【问题讨论】:
-
发布您的快速代码而不是图像..
-
这有什么不同?
-
明白了。谢谢 :) 让我修改一下。
标签: objective-c swift xcode nsnumber