gpt4 book ai didi

ios - 实例方法是闭包吗?

转载 作者:行者123 更新时间:2023-12-01 19:59:46 25 4
gpt4 key购买 nike

在“Swift Programming Language 3.0”一书中,它提到闭包的类型包括:

Global functions are closures that have a name and do not captureany values

Nested function are closures that have a name and cancapture values from their enclosing function

Closure expression areunnamed closure written in a lightweight syntax that can capturevalues from their surrounding context


我只是想知道类范围中存在的函数是否算作闭包?当然可以将这样的函数作为参数传递给其他函数,但它是闭包吗?

最佳答案

是的!绝对地!这是一个使用 lowercased() 的示例String的方法.

let aClosure: (String) -> () -> String = String.lowercased


let anUpperCasedString = "A B C"
print(anUpperCasedString)

let aLowerCaseString = aClosure(anUpperCasedString)()
print(aLowerCaseString)

可以看到这个闭包的类型是 (String) -> () -> String .这是因为 String.lowercased完全未应用,它不知道它在哪个实例上运行。

调用 aClosure(anUpperCasedString)将返回一个现在为 () -> String 的闭包.烘焙到其中的是它将操作的实例。只有当你调用这个没有参数的新闭包( () )时,它才会真正执行 lowercased() 的主体,对您在上一步中提供的实例进行操作,并返回 String结果。

因此,这也是有效的:
let aLowerCaseString = String.lowercased("QWERTY")()

它只是在一个内联步骤中完成上述所有步骤。

这种技术称为函数柯里化(Currying)。 This post更多地讨论这种技术(称为函数柯里化(Currying)),因为它适用于 Swift 中的实例方法。

关于ios - 实例方法是闭包吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40414536/

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