gpt4 book ai didi

ios - 快速回调不打印

转载 作者:行者123 更新时间:2023-11-29 02:13:12 25 4
gpt4 key购买 nike

我尝试快速理解回调的主要概念我有以下代码:

typealias ImageHandler = (String,NSError?) -> Void

func PostOnSocialMedia(image:String?){
println(0)

Post({(image)->Void in
println(1)
})

println(2)
}

func Post(handler:ImageHandler){
println(3)
}

我的代码输出是 0,3,2,我的问题是为什么不打印数字 1。

最佳答案

它不会打印 1,因为您传递的是一个从未被调用的函数。

这个:

Post({ (image)->Void in
println(1)
})

声明一个临时函数(一个“闭包表达式”——一种在 { } 之间声明匿名函数的快速简便方法),该函数采用 (String,NSError?) 参数 对,并且不返回任何内容。然后将该函数传递给 Post 函数。

但是 Post 函数对它没有任何作用。为了运行一个函数,需要调用它。如果您像这样更改了 Post 函数:

func Post(handler:ImageHandler){
println(3)

// call the handler that was passed in...
handler("blah",nil)
}

你会看到它打印 1。

请注意,PostOnSocialMedia 接收的 image 参数和临时函数内的 image 参数变量是两个不同的变量 - 作用域规则意味着在 temp 函数内部声明的一个掩盖了外部作用域中的一个。但它们非常不同(实际上,它们是不同的类型——一种是字符串,另一种是字符串和错误的二元组)。

尝试 reading this有关 Swift 中的一阶函数和闭包的简短介绍。

关于ios - 快速回调不打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29056098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com