无法在 Swift 中的函数中返回值 [重复]

Posted

技术标签:

【中文标题】无法在 Swift 中的函数中返回值 [重复]【英文标题】:Cannot return values in function in Swift [duplicate] 【发布时间】:2016-08-03 11:00:07 【问题描述】:

我正在尝试从函数中返回 JSON,为此我这样做了:

func getAllItems() -> JSON 
    Alamofire.request(.GET, Links.sharedInstance.getAllItems, encoding: .JSON).validate().responseJSON  (response) in
        do 
            let json = JSON(data: response.data!)

            return json
        
    

但它给了我下一个错误:

Unexpected non-void return value in void function

我该如何解决这个问题?我已经尝试在 func 中使用局部变量,但在这种情况下我得到了 nil。

有什么建议吗?

【问题讨论】:

您在响应区使用return 语句,而不是在您的功能区。在你的函数中声明一个 var 为 var ret : JSON!将“return json”替换为“ret = json”,然后在响应区域外替换“return re” @LucaNicoletti 不,你不能从关闭中返回。 OP 应该使用回调。 @EricD 我没有说要从闭包返回,我告诉他给闭包中的 var 赋值,然后返回,但是如果响应不够快,你紧张,最好用回调 看看最热门的 [alamofire] 问题。这已被反复询问和回答。 Alamofire 自述文件明确提到了异步响应处理。 更好的复制目标:***.com/questions/27390656/… 【参考方案1】:

你应该像这样使用完成处理程序:

func getAllItems(completion:(json: JSON?) -> (Void)) 
        Alamofire.request(.GET, Links.sharedInstance.getAllItems, encoding: .JSON).validate().responseJSON  (response) in
            do 
                let json = JSON(data: response.data!)

                completion(json)
            
        
    

【讨论】:

以上是关于无法在 Swift 中的函数中返回值 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

void函数Swift3中的意外非void返回值

nodejs函数中的返回值[重复]

如何从 Swift 中的 void 闭包中返回一个值?

Swift:在表格视图中过滤结果,因此它不会从 JSON 返回重复项

尽管声明明确,但 Swift 中的 String 值不会改变 [重复]

Swift函数iOS中未返回数据[重复]