[swift-evolution] Proposal: Auto-implemented computed properties

Nicky Gerritsen nickygerritsen at me.com
Fri Dec 11 13:23:48 CST 2015


I’m wondering what the actual use of this is. Why not just write:

class Foo {
	init(x: Double) {
		self.x = x
	}

	var x: Double
}


Regards,

Nicky

> On 11 dec. 2015, at 20:20, Nathan Yee via swift-evolution <swift-evolution at swift.org> wrote:
> 
> Certain languages allow the programmer to avoid creating backing variables for getters and setters by using this syntax:
> 
> class Foo {
>     init(x: Double) {
>         self.x = x
>     }
>     var x: Double {
>         get
>         set
>     }
>     // alternatively var x: Double { get; set }
> }
> 
> and generating code equivalent to this:
> 
> class Foo {
>     init(x: Double) {
>         _x = x
>     }
>     var _x: Double
>     var x: Double {
>         get {
>             return _x
>         }
>         set {
>             _x = newValue
>         }
>     }
> }
> 
> This notation decreases verbosity and reduces the chance of incorrectly implementing the pattern.
> 
> In the following case, the computed property 'x' can only be set in the initializer.
> 
> class Foo {
>     init(x: Double) {
>         self.x = x
>     }
>     var x: Double { get }
> }
> 
> Alternatively, the following syntax can be used to avoid using an initializer:
> 
> class Foo {
>     var x: Double { get } = 1.0
> }
> 
> Before looking into the nuances of this syntax (regarding struct/enum properties, access control, attributes, etc.) I would like to ask the community if this feature would be a good fit for Swift.
> 
> -- 
> Nathan
>  _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20151211/421b017b/attachment.html>


More information about the swift-evolution mailing list