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