在 Swift 3 中附加一个函数范围之外的变量
Posted
技术标签:
【中文标题】在 Swift 3 中附加一个函数范围之外的变量【英文标题】:Appending a variable outside the scope of a function in Swift 3 【发布时间】:2017-07-16 22:01:51 【问题描述】:我正在尝试附加 jsonFile,但是,除非我对函数中的参数文件使用可变变量,否则我无法将新的 NSString 附加到 jsonFile。我找到了使用“inout”的解决方案,但在这种情况下,我得到了“scaping 闭包只能通过值 file.append(jsonData) 显式捕获 inout 参数的错误”
var jsonFile: [NSString] = []
func function(file: inout [NSString])
let request = NSMutableURLRequest(url: URL(string: "https://parse.udacity.com/parse/classes/StudentLocation?limit=1")!)
request.addValue("QrX47CA9cyuGewLdsL7o5Eb8iug6Em8ye0dnAbIr", forHTTPHeaderField: "X-Parse-Application-Id")
request.addValue("QuWThTdiRmTux3YaDseUSEpUKo7aBYM737yKd4gY", forHTTPHeaderField: "X-Parse-REST-API-Key")
let session = URLSession.shared
let task = session.dataTask(with: request as URLRequest) data, response, error in
if error != nil // Handle error...
return
let jsonData = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)!
print(NSString(data: data!, encoding: String.Encoding.utf8.rawValue)!)
file.append(jsonData)
task.resume()
function(file: &jsonFile)
print(jsonFile)
【问题讨论】:
【参考方案1】:您正在处理异步代码。您不应使用inout
参数。相反,您应该使用完成处理程序。
以下内容将起作用:
var jsonFile: [String] = []
func function(completion: @escaping (String?) -> Void)
var request = URLRequest(url: URL(string: "https://parse.udacity.com/parse/classes/StudentLocation?limit=1")!)
request.addValue("QrX47CA9cyuGewLdsL7o5Eb8iug6Em8ye0dnAbIr", forHTTPHeaderField: "X-Parse-Application-Id")
request.addValue("QuWThTdiRmTux3YaDseUSEpUKo7aBYM737yKd4gY", forHTTPHeaderField: "X-Parse-REST-API-Key")
let session = URLSession.shared
let task = session.dataTask(with: request) data, response, error in
if let data = data, error != nil
if let jsonData = String(data: data, encoding: .utf8)
completion(jsonData)
else
completion(nil)
else
completion(nil)
task.resume()
function() (string) in
if let string = string
jsonFile.append(string)
print(jsonFile)
注意所有其他清理。不要使用NSString
,使用String
。不要使用NSMutableURLRequest
,使用URLRequest
和var
。
【讨论】:
以上是关于在 Swift 3 中附加一个函数范围之外的变量的主要内容,如果未能解决你的问题,请参考以下文章
我正在尝试将地理位置存储在函数范围之外的一些变量中,js [重复]