我无法理解我做错了什么
我有一个应用程序可以加载帖子及其评论。视图控制器从另一个文件请求一个函数,该文件返回(响应?,注释?)
我收到一个错误:
条件绑定的初始化程序必须具有可选类型,而不是'(ActionResult?,[PostComment]?)'
对于
行 const myScript = require('/pathTo/myScript.js')
我错了什么?
commentsViewController
if let (response, comments) = (response, comments )
commentFunctions
postComments.loadCommentForPost(id: postId) { (response, comments) in
// ERROR here: Initializer for conditional binding must have Optional type, not '(ActionResult?, [WorldMessageComment]?)'
if let (response, comments) = (response, comments ) {
if response!.success == 1 {
DispatchQueue.main.async(execute: {() -> Void in
self.comments = comments!
self.tableView.reloadData()
})
} else {
DispatchQueue.main.async(execute: {() -> Void in
self.handleResponses.displayError(title: response!.title, message: response!.message)
})
}
}
}
答案 0 :(得分:4)
问题在于:
if let (response, comments) = (response, comments ) {
你基本上做的是在作业的右侧创建一个新的非可选元组(带有两个可选组件),因此编译器抱怨你不能将if let
用于非可选类型。
您实际上可以认为loadCommentsForPost返回的元组已经在回调的参数中“拆分”,因此您可以单独处理response
和comments
。
postComments.loadCommentForPost(id: postId) { response, comments in
if let response = response, let comments = comments {
if response.success == 1 {
...