Function 函数和闭包赋值的区别
函数声明之间的swift是否存在任何差异:Function 函数和闭包赋值的区别,function,swift,closures,Function,Swift,Closures,函数声明之间的swift是否存在任何差异: func function(a: String) { print(a); } function("test"); 和关闭分配: let closure = { (a: String) in print(a); } closure("test"); 这两者有什么区别吗 命名或匿名 func function(a: String) { print("\(a), name: \(__FUNCTION__)"); } le
func function(a: String) {
print(a);
}
function("test");
和关闭分配:
let closure = {
(a: String) in
print(a);
}
closure("test");
这两者有什么区别吗
func function(a: String) {
print("\(a), name: \(__FUNCTION__)");
}
let closure = { (a: String) in
print("\(a), name: \(__FUNCTION__)");
}
仅在闭包中支持:
let obj = FooClass()
let closure = { [weak obj] in ... }
仅在以下功能中受支持:
func curriedFunc(x:Int)(y:Int) { ... }
let curried = curriedFunc(1)
curried(y:2)
func function<T>(x:T) { ... }
func recursive(var x:Int) -> Int {
...
return condition ? x : recursive(x)
}
func function(a: String) { print("String: \(a)") }
func function(a: Float) { print("Float: \(a)") }
类似,但与使用闭包不同:
let closure = { (x:Int) in { (y:Int) in ... }}
仅在以下功能中受支持:
func curriedFunc(x:Int)(y:Int) { ... }
let curried = curriedFunc(1)
curried(y:2)
func function<T>(x:T) { ... }
func recursive(var x:Int) -> Int {
...
return condition ? x : recursive(x)
}
func function(a: String) { print("String: \(a)") }
func function(a: Float) { print("Float: \(a)") }
您也可以使用闭包进行此操作:
var recursive:((Int) -> Int)!
recursive = { (var x) in
...
return condition ? x : recursive(x)
}
但不建议这样做,因为这会导致强参考循环
仅在以下功能中受支持:
func curriedFunc(x:Int)(y:Int) { ... }
let curried = curriedFunc(1)
curried(y:2)
func function<T>(x:T) { ... }
func recursive(var x:Int) -> Int {
...
return condition ? x : recursive(x)
}
func function(a: String) { print("String: \(a)") }
func function(a: Float) { print("Float: \(a)") }
n、 b.您可以将其作为闭包引用,如下所示:
let f:(Float) -> Void = function
另一个区别:另一个函数内部的递归性 嵌套函数不能是递归函数:
func foo() {
func bar() { bar() } // does not compile
}
func foo() {
var bar: (() -> ())!
bar = { bar() }
}
但其他函数中的闭包可以是递归的:
func foo() {
func bar() { bar() } // does not compile
}
func foo() {
var bar: (() -> ())!
bar = { bar() }
}
一个区别是您不能定义curried闭包,但可以定义curried函数。另一个区别是,您不能定义递归闭包,但可以定义递归函数,“但不建议这样做,因为这会导致强引用循环。”不,它不会。