ios - 类理解: Unexpected non-void return value in void function (swift 3)

标签 ios swift xcode alamofire swifty-json

我试图弄清楚类如何快速工作。 我已经阅读了 dev.apple 上的类文档,但可能有一些基本内容我不明白。感谢您的帮助,如果可能的话,请澄清其工作原理。

运行 getData.connect 时,我无法从此函数返回 json 对象

错误:getData.swift:39:20:void 函数中出现意外的非 void 返回值

import UIKit
import Alamofire
import SwiftyJSON

public class getData: NSObject {
    public func connect(url: String, devhostname: String, hostname: String, username: String, password: String) -> Array<JSON> {
        let serverTrustPolicies: [String: ServerTrustPolicy] = [
            hostname: .pinCertificates(
                certificates: ServerTrustPolicy.certificates(),
                validateCertificateChain: false,
                validateHost: true
            ),
            devhostname: .disableEvaluation
        ]

        let sessionManager = Alamofire.SessionManager(
            serverTrustPolicyManager: ServerTrustPolicyManager(policies: serverTrustPolicies)
        )

        var headers: HTTPHeaders = [:]

        if let authorizationHeader = Request.authorizationHeader(user: username, password: password) {
            headers[authorizationHeader.key] = authorizationHeader.value
        }

        sessionManager.request(url, headers: headers).responseJSON { response in

            let data = response.data!
            let json = JSON(data: data)

            return json

            sessionManager.session.invalidateAndCancel()
        }
    }
}

最佳答案

您的方法必须返回 Array<JSON>对象:

public func connect(url: String, devhostname: String, hostname: String, username: String, password: String) -> Array<JSON>

但是这段代码是异步执行的:

sessionManager.request(url, headers: headers).responseJSON { response in

    let data = response.data!
    let json = JSON(data: data)

    return json

    // this line is never executed too..
    sessionManager.session.invalidateAndCancel()
}

因此,您的方法永远不会返回预期的数组。您必须从方法声明中删除 return 语句,并使用协议(protocol)/监听器或 CompletionHandler 管理异步响应。

关于ios - 类理解: Unexpected non-void return value in void function (swift 3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39995351/

相关文章:

ios - 将一些日期字符串转换为 NSDate

ios - 如何在自定义 UICollectionViewLayout 中仅允许垂直和水平滑动

IOS/xcode : what methods are getting executed by default

ios - 将数组字段传递给 Swift 中的变量的此 JSON 语句的正确语法?

ios - 在 Katalon Studio 中,当它没有标签或名称对象属性时如何点击 iOS 应用程序的元素

ios - iphone/ipad 网络视频只能播放超过 3g,不能播放 Wifi

android - 如何在 NativeScript 移动应用程序中引用本地文件

swift - 将字典的字符串表示形式转换为 Swift 中的字典?

ios - 如何设置 UITableView _UISwipeToDeletePlaceholderCell 的颜色

ios - EXC_BAD_ACCESS 在 Swift 中访问自定义 MKAnnotation 的属性时