从函数返回多个值时Swift错误

时间:2018-04-22 19:55:22

标签: swift function

我无法理解我做错了什么

我有一个应用程序可以加载帖子及其评论。视图控制器从另一个文件请求一个函数,该文件返回(响应?,注释?)

我收到一个错误:

  

条件绑定的初始化程序必须具有可选类型,而不是'(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)
                    })
                }
            }
        }

1 个答案:

答案 0 :(得分:4)

问题在于:

if let (response, comments) = (response, comments ) {

你基本上做的是在作业的右侧创建一个新的非可选元组(带有两个可选组件),因此编译器抱怨你不能将if let用于非可选类型。

您实际上可以认为loadCommentsForPost返回的元组已经在回调的参数中“拆分”,因此您可以单独处理responsecomments

postComments.loadCommentForPost(id: postId) { response, comments in
    if let response = response, let comments = comments {
       if response.success == 1 {
       ...