我有这个代码:
let task = URLSession.shared.dataTask(with: request) { (data: Data?, response: URLResponse?, error: Error?) in
if error != nil {
print(error!)
return
}
do {
let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary
if let parseJSON = json {
let getDetail = parseJSON["detail"] as? String
returnDetail = getDetail!.base64Decoded()
} // parse json end
} // do end
catch {
print(error)
}
} // let task end
returnDetail
先前已定义。我做了任何事情来设置returnDetail
价值,getDetail!.base64Decoded()
但它只在内部起作用let task = ...
如何将其传递给外部范围?
您有几种方法可以解决从异步函数内部返回值的问题。其中之一是将异步网络调用包装在一个函数中,并使其返回一个completionHandler。
一些一般性建议:除非您100%确信不会将可选值设为,否则请勿使用强制展开nil
。对于网络请求,data
即使没有错误,也可以为零,因此切勿强行展开data
,请使用if let
或安全地展开guard let
。.mutableContainers
解析JSON值时请勿在Swift中使用,因为它无效。解析的JSON对象的可变性是通过使用let
or
var
关键字来声明保存它的变量来确定的。也不要使用NSDictionary
,请使用本机的Swift对应字典Dictionary([String:Any]
是type的简写Dictionary<String,Any>
)。
func getDetail(withRequest request: URLRequest, withCompletion completion: @escaping (String?, Error?) -> Void) {
let task = URLSession.shared.dataTask(with: request) { (data: Data?, response: URLResponse?, error: Error?) in
if error != nil {
completion(nil, error)
return
}
else if let data = data {
do {
guard let json = try JSONSerialization.jsonObject(with: data, options: []) as? [String:Any] else {completion(nil, nil);return}
guard let details = json["detail"] as? String else {completion(nil, nil);return}
completion(details, nil)
}
catch {
completion(nil, error)
}
}
}
task.resume()
}
然后您可以通过以下方式调用此函数
getDetail(withRequest: request, withCompletion: { detail, error in
if error != nil {
//handle error
} else if detail = detail {
//You can use detail here
}
})
问题内容: 我使用创建了一个react应用。我有一个现有的网页,并且react应用程序按正常方式附加到html页面内的div。 该网页具有一些全局javascript常量,这是React应用程序运行所必需的。有什么办法可以将这些变量传递给react应用吗?结构如下 我正在努力,因为javascript当然在构建阶段会被精简,因此任何声明如下: 由于变量被重写而无法正常工作。我试图偷偷摸摸,并使用e
问题内容: 我确定我的问题是基于对node.js中的异步编程缺乏了解,但这是可行的。 例如:我有一个要爬网的链接列表。当每个请求都返回时,我想知道它的URL。但是,大概是由于竞争条件造成的,每个请求都将URL返回设置为列表中的最后一个值。 预期产量: 实际输出: 所以我的问题是: 如何将url(按值)传递给回调函数?要么 链接HTTP请求以使其顺序运行的正确方法是什么?要么 我还缺少什么? PS:
问题内容: 如何将值从javascript变量传递到razor变量,asp.net mvc razor视图引擎是否可能? 问题答案: 你不能 原因是他们不在同一时间“生活”。Razor变量是“服务器端变量”,在将页面发送到“客户端”后,它们不再存在。 当服务器收到视图请求时,它仅使用HTML,CSS和Javascript代码创建视图。没有C#代码,所有这些都被“翻译”为客户端语言。 当视图仍在服务
问题内容: 我有一个调用file.sql的shell脚本 我正在寻找一种将一些参数传递给我的file.sql的方法。 如果我没有将具有某个值的变量传递给sql脚本,则将不得不使用SELECT语句创建多个.sql文件,并且所有更改将只需要几个字即可。 我的shell脚本调用file.sql: 这就是我的file.sql的样子: 我可以修改我的shell脚本,以便它传递变量名吗? 即:模型=“建筑”,
问题内容: 我在将值从JS传递到PHP时遇到问题,以便可以将其用作PHP函数的参数。一旦单击链接,JS函数将由onclick事件触发。这是JS + HTML代码: PHP(insert.php): 感谢您能为我提供帮助的人。我对PHP和JS还是很陌生,所以请原谅我的愚蠢。 问题答案: 您将数据从浏览器传递到服务器。Javascript是一种用于操纵浏览器的语言。PHP是您的服务器端语言。 您可以在
开头是我的jsp页面代码: 我想从