Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 实例方法是闭包吗?_Ios_Swift_Function_Closures - Fatal编程技术网

Ios 实例方法是闭包吗?

Ios 实例方法是闭包吗?,ios,swift,function,closures,Ios,Swift,Function,Closures,在《Swift编程语言3.0》一书中,它提到了闭包的类型包括: 全局函数是具有名称且不捕获的闭包 任何价值观 嵌套函数是具有名称且可以 从其封闭函数中捕获值 闭包表达式是 使用轻量级语法编写的未命名闭包,可以捕获 来自其周围环境的值 我只是想知道存在于类作用域中的函数是否算作闭包?当然,可以将此类函数作为参数传递给其他函数,但它是闭包吗?是的!绝对地下面是一个使用String方法的示例 let aClosure: (String) -> () -> String = String.l

在《Swift编程语言3.0》一书中,它提到了闭包的类型包括:

全局函数是具有名称且不捕获的闭包 任何价值观

嵌套函数是具有名称且可以 从其封闭函数中捕获值

闭包表达式是 使用轻量级语法编写的未命名闭包,可以捕获 来自其周围环境的值


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

是的!绝对地下面是一个使用
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)
将返回一个现在是
()->字符串的闭包。烘焙到其中的是它将操作的实例。只有当您在没有参数(
()
)的情况下调用这个新闭包时,它才会实际执行
小写()
的主体,对上一步中提供的实例进行操作,并返回
字符串
结果

因此,这也是有效的:

let aLowerCaseString = String.lowercased("QWERTY")()
它只是在一个内联步骤中完成上面的所有步骤


这种技术称为函数转换。在Swift的实例方法中,更多地讨论了这种技术(称为函数currying)。

这似乎是相关的:哇,你的答案简直太棒了!感谢您以清晰易懂的方式解释!非常感谢你的帮助@TonyStark没问题:)