swift - 使用 json 序列化的 void 函数 swift 4 中出现意外的非 void 返回值

标签 swift

我目前正在尝试通过编写可多次使用的通用函数来清理项目上的代码。但是我需要我的函数返回一个数组。我的错误是“void 函数中出现意外的非 void 返回值”

这是我的代码

func JSONSerialisation(JsonUrl: String) -> NSArray{
    let url = URL(string: JsonUrl)
    let task = URLSession.shared.dataTask(with: url!) { (data, responce, error) in
        if error != nil
        {
            print("error")

        }
        else
        {
            if let content = data
            {
                do
                {
                    if let Json = try JSONSerialization.jsonObject(with: content, options: JSONSerialization.ReadingOptions.mutableContainers) as? NSArray{
                        return Json //Error occurs here
                    }

                }
                catch
                {

                }

            }

        }

    }
    task.resume()

}

Stack Overflow 上有一些类似的问题,但到目前为止,没有一个能够解决我的问题,因为他们都说添加 -> NSArray

提前致谢

最佳答案

您无法直接从异步任务返回数据。使用闭包

使用闭包创建一个函数,例如。

func jsonSerialisation(jsonUrl: String, completion block: @escaping ((NSArray) -> ())){
    let url = URL(string: JsonUrl)
    let task = URLSession.shared.dataTask(with: url!) { (data, responce, error) in
        if let e = error{
            print(e.localizedDescription)
        }
        else{
            if let content = data{
                do {
                    if let Json = try JSONSerialization.jsonObject(with: content, options: JSONSerialization.ReadingOptions.mutableContainers) as? NSArray{
                        block(Json)
                    }
                }
                catch let error{
                    print(error.localizedDescription)
                }
            }
        }
    }
    task.resume()
}

并调用:

jsonSerialisation(jsonUrl: "Your Url") { (json) in
    print(json)
}

这很有帮助

关于swift - 使用 json 序列化的 void 函数 swift 4 中出现意外的非 void 返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47713167/

相关文章:

swift 2 : Method for giving all sprites spawned a change in velocity

swift - 将现有的(通用的)swift 类扩展为可哈希的

ios - 编辑时 tableView 中没有 didSelectRowAtIndexPath()

swift - 如何压缩4个以上的发布者

SwiftUI里面的数学运算(部分查看)

swift - SwiftUI 中的多组件选择器 (UIPickerView)

ios - playground.xcworkspace 无法保存,因为文件已存在

ios - Swift WKWebView 禁用 Javascript

json - 使用 SwiftyJSON 和 Alamofire 在 TableView 上显示 JSON 数据

swift - 使用 CAEmitterLayer 的屏幕截图 View