类理解:void函数中出现意外的非void返回值(swift 3)
Posted
技术标签:
【中文标题】类理解:void函数中出现意外的非void返回值(swift 3)【英文标题】:Class understanding: Unexpected non-void return value in void function (swift 3) 【发布时间】:2016-10-12 09:39:21 【问题描述】:我正试图弄清楚类是如何快速运行的。 我已经阅读了 dev.apple 上的类文档,但可能有一些我不明白的重要内容。感谢您的帮助,如果可能,请说明它应该如何工作。
运行 getData.connect 时,我无法从该函数返回 json 对象
错误:getData.swift:39:20: Unexpected non-void return value in void function
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()
【问题讨论】:
【参考方案1】:您的方法必须返回一个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 语句,并使用协议/侦听器或 CompletionHandlers 管理异步响应。
【讨论】:
【参考方案2】:.responseJSON
是异步的,您不能只在.responseJSON
回调中使用return
将数据返回给调用函数或从中返回。
您可以删除 connect
函数的返回类型,并使用 [JSON] -> Void
类型的回调返回数据。
【讨论】:
以上是关于类理解:void函数中出现意外的非void返回值(swift 3)的主要内容,如果未能解决你的问题,请参考以下文章
如何停止返回导致“void函数中出现意外的非void返回值”?