Swift 转义函数
Swift escaping function
我遵循了 youtube 上的教程如何从 json 获取数据,但我不理解所有步骤。
这是函数:
func downloadJSON (completed: @escaping () -> ()) {
let url = URL (string: "https://api.github.com/repos/\(details!.full_name)/readme")
URLSession.shared.dataTask(with: url!) { (data, response, error) in
if error == nil {
do {
self.read = try JSONDecoder().decode(Readm.self, from: data!)
DispatchQueue.main.async {
completed()
}
}catch {
print (error)
}
}
}.resume()
}
}
我就是这样称呼它的
downloadJSON {
if let content = self.read?.content {
self.textViewScroll.text = self.base64Decoded(word: content)
}
我看到我正在使用@escaping,如果我做对了,viewDidLoad 中的“downloadJson”会在 func 之后调用吗? DispatchQueue.main.async 中的“completed()”是什么意思?
如果有人可以根据此示例帮助我进行解释,我将不胜感激。谢谢!
您的闭包“完成”转义到 DispatchQueue.main.async { ... } 中的其他闭包。
它被转义是因为它属于其他对象(转义到它),在这种情况下是其他闭包。
你调用downloadJSON有误
func downloadJSON (completed: @escaping (Bool) -> ()) {
let url = URL (string: "https://api.github.com/repos/\(details!.full_name)/readme")
URLSession.shared.dataTask(with: url!) { (data, response, error) in
if error == nil {
do {
self.read = try JSONDecoder().decode(Readm.self, from: data!)
DispatchQueue.main.async {
completed(true)
}
}catch {
completed(false)
}
}
}.resume()
}
那么调用func就是:
func downloadJSON()
{
[weak self] (result) in
guard let self = self else {return}
if result
{
if let content = self.read?.content {
self.textViewScroll.text = self.base64Decoded(word: content)}
}
else
{
print("error")
}
}
我遵循了 youtube 上的教程如何从 json 获取数据,但我不理解所有步骤。 这是函数:
func downloadJSON (completed: @escaping () -> ()) {
let url = URL (string: "https://api.github.com/repos/\(details!.full_name)/readme")
URLSession.shared.dataTask(with: url!) { (data, response, error) in
if error == nil {
do {
self.read = try JSONDecoder().decode(Readm.self, from: data!)
DispatchQueue.main.async {
completed()
}
}catch {
print (error)
}
}
}.resume()
}
}
我就是这样称呼它的
downloadJSON {
if let content = self.read?.content {
self.textViewScroll.text = self.base64Decoded(word: content)
}
我看到我正在使用@escaping,如果我做对了,viewDidLoad 中的“downloadJson”会在 func 之后调用吗? DispatchQueue.main.async 中的“completed()”是什么意思? 如果有人可以根据此示例帮助我进行解释,我将不胜感激。谢谢!
您的闭包“完成”转义到 DispatchQueue.main.async { ... } 中的其他闭包。
它被转义是因为它属于其他对象(转义到它),在这种情况下是其他闭包。
你调用downloadJSON有误
func downloadJSON (completed: @escaping (Bool) -> ()) {
let url = URL (string: "https://api.github.com/repos/\(details!.full_name)/readme")
URLSession.shared.dataTask(with: url!) { (data, response, error) in
if error == nil {
do {
self.read = try JSONDecoder().decode(Readm.self, from: data!)
DispatchQueue.main.async {
completed(true)
}
}catch {
completed(false)
}
}
}.resume()
}
那么调用func就是:
func downloadJSON()
{
[weak self] (result) in
guard let self = self else {return}
if result
{
if let content = self.read?.content {
self.textViewScroll.text = self.base64Decoded(word: content)}
}
else
{
print("error")
}
}