delphi 什么是“with ... do”的快速对应词

goucqfw6  于 2022-11-04  发布在  其他
关注(0)|答案(4)|浏览(247)

当在 Delphi 中编码时,我可以使用以下语法来使我的代码看起来更好:

with person do begin       
    setFirstName("Frodo");
    setLastName("Baggins");
    setAge(25);
    enableRing;
    sendToQuest;
end;

这将是相同的:

person.setFirstName("Frodo");
person.setLastName("Baggins");
person.setAge(25);
person.enableRing;
person.sendToQuest;

这只是为了代码更好看,没有别的。
在swift 2中有没有与 Delphi 的“with .. do”语法等效的语法?

tv6aics1

tv6aics11#

我确实设法用一个简单的函数模拟了这个效果...

func with<T>(_ element: T, _ make: (T) -> ()) {
     make(element)
}
  • 如果你不喜欢< make >,你可以用〈do〉来代替它... *

以及来自:

minLat = Swift.max(location.coordinate.latitude, minLat)
 minLong = Swift.max(location.coordinate.longitude, minLong)
 maxLat = Swift.min(location.coordinate.latitude, maxLat)
 maxLong = Swift.min(location.coordinate.longitude, maxLong)

我得到了:

with(location.coordinate) { c in
    minLat = Swift.max(c.latitude, minLat)
    minLong = Swift.max(c.longitude, minLong)
    maxLat = Swift.min(c.latitude, maxLat)
    maxLong = Swift.min(c.longitude, maxLong)
}

它出来很可爱...

tuwxkamq

tuwxkamq2#

在Swift 2中有没有与 Delphi 的“with .. do”语法等效的语法?
不,没有。

0h4hbjxa

0h4hbjxa3#

可以使用元组类型设置结构体的多个字段。这比with ... do结构体具有更好的封装性,尽管看起来您尝试做的事情用示例方法处理更好。

u59ebvdq

u59ebvdq4#

现在可以使用keyPaths了,虽然它并不能真正提高可读性,但它确实缩短了嵌套属性。

struct ExampleStruct {
    var somePropertyOfTheExampleStruct : CGPoint
}

var aVar = ExampleStruct(somePropertyOfTheExampleStruct: .zero)

// Change some values
aVar.somePropertyOfTheExampleStruct.x = 2.0
aVar.somePropertyOfTheExampleStruct.y = 3.0

// This does the same thing
let k = \ExampleStruct.somePropertyOfTheExampleStruct
aVar[keyPath: k].x = 2.0
aVar[keyPath: k].y = 3.0

相关问题