Class 理解:void 函数中的意外非 void return 值 (swift 3)
Class understanding: Unexpected non-void return value in void function (swift 3)
我想弄清楚 类 在 swift 中是如何工作的。
我已经阅读了关于 dev.apple 的 类 文档,但可能有一些我不理解的重要内容。感谢您的帮助,如果可能,请说明这是如何工作的。
当 运行 getData.connect
时,我无法从该函数 return 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()
}
}
}
您的方法必须 return 一个 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 预期的数组。您必须从方法声明中删除 return 语句并使用 Protocols/Listeners 或 CompletionHandlers.
管理异步响应
.responseJSON
是异步的,您不能只 return 您的数据到调用函数或在 .responseJSON
回调中使用 return
从函数中取出数据。
您可以删除 return 类型的 connect
函数,并使用 [JSON] -> Void
.
类型的回调返回 return 数据
我想弄清楚 类 在 swift 中是如何工作的。 我已经阅读了关于 dev.apple 的 类 文档,但可能有一些我不理解的重要内容。感谢您的帮助,如果可能,请说明这是如何工作的。
当 运行 getData.connect
时,我无法从该函数 return 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()
}
}
}
您的方法必须 return 一个 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 预期的数组。您必须从方法声明中删除 return 语句并使用 Protocols/Listeners 或 CompletionHandlers.
管理异步响应.responseJSON
是异步的,您不能只 return 您的数据到调用函数或在 .responseJSON
回调中使用 return
从函数中取出数据。
您可以删除 return 类型的 connect
函数,并使用 [JSON] -> Void
.