For variables, it is common to want to the state of the variable. In larger (nested) structs, the duplication involved can become especially annoying:

myVar.prop1.prop2.enabled = !myVar.prop1.prop2.enabled

It’s also easy to make a mistake in the code above if there are multiple Bool vars.

You can solve this problem by a method toggle on Bool:

 Bool {
   mutating func toggle() {
       self = !self

This allows us to write the example above without duplication, and with clear intent:


Much better 😊

This won’t always transfer to other languages, but Swift’s mutable self makes it very useful. So useful in fact that we proposed it as an extension to the Swift Standard Library.

Anyone in the community can discuss or submit a proposal. If you’re new to the process, and you’d like to make a suggestion, start by reading the Contributing Guidelines, and the Swift Evolution Process document.

Until this week, all discussion happened on the swift-evolution mailing list. From Wednesday, January 17, 6PM Pacific, the mailing lists will be suspended, and a few days later the new Swift Discourse forum will take up the mantle. You can join the forum today. 🎉

Our thanks to @PublicExtension for pointing out a similar extension by @Kametrixom (and to Jasdev for writing it up!).

To learn more about mutation and structs, watch Swift Talk Episode 21 or read the transcript. If you’d like to learn more about Swift’s powerful features for dealing with mutability, read our book, Advanced Swift.

Source link
Based Blockchain Network


Please enter your comment!
Please enter your name here