在Kotlin,我们可以改变以下内容
// Original code
var commonObj = ClassCommonObj()
commonObj.data1 = dataA
commonObj.data2 = dataB
commonObj.data3 = dataC
// Improved code
var commonObj = ClassCommonObj()
with(commonObj) {
data1 = dataA
data2 = dataB
data3 = dataC
}
但是在Swift中如下所示,我是否可以使用等效的 with
函数?
// Original code
var commonObj = ClassCommonObj()
commonObj.data1 = dataA
commonObj.data2 = dataB
commonObj.data3 = dataC
1 回答
不幸的是,目前在Swift中还没有这样的功能 . 但是,扩展功能可以实现类似的功能:
此协议和扩展提供了两个
inline
函数,其中一个可以用于返回已处理的对象,另一个与Kotlin和其他语言中的with
严格相似(90年代支持Visual Basic) .Usage
指定这些函数应该应用于的类型:
apply :
这里我们创建一个对象,一旦执行了闭包,就会返回修改后的对象 .
with :
在Kotlin中等于
with
.原始基于this source code .
NOTE:
Swift编译器通常被认为足够聪明,可以决定是否应该内联函数 . 很可能,即使没有严格指定
@inline (__always)
,这两个也会因为相对紧凑而内联 . 无论哪种方式,您都应该知道此关键字不会影响逻辑及其结果,因为内联大约是optimizing the program .