在Swift中重用闭包
以下哪项更好:
样本1: var x: Int = 0 for _ in 1...5 { someList.append( Foobar(someClosure: { println("X = (x)") })) } 样品2: var x: Int = 0 var c: ()->() = { println("X = (x)") } for _ in 1...5 { someList.append( Foobar(someClosure: c)) } >如果我将闭包视为引用类型,那么sample2将是最好的,因为我正在重用相同的对象(减少内存分配,重用对象). 编辑: 两个样本之间是否存在根本区别(除了写作风格)? 解决方法
你在滥用“封闭”这个词.所有函数都是Swift中的闭包.所以你只是指“功能”.
一个函数可以有一个名字.您展示的方式是为函数命名的一种方法: var c: ()->() = { println("X = (x)") } 但这是另一种方式: func c() { println("X = (x)") } 那就对了.声明函数只是为函数命名的一种方法. 但是,函数也可以是匿名的,这意味着它没有名称.这只是在不需要名称时缩短代码的一种方法,因为函数体可以在使用它的一个地方内联定义.你也展示了一个例子: for _ in 1...5 { someList.append( Foobar(someClosure: { println("X = (x)") })) } 因此,如果您想要或需要,请为函数命名,如果不想,则不要.这种或那种方式没有优势,劣势或差异. 除了一件事:匿名函数可以有一个捕获列表(定义从函数体外部捕获的类实例的内存管理,例如[weak self] in),但声明的函数不能.我认为这是语言中的一个错误,虽然不是一个非常严重的错误. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |