[swift-evolution] idea: immutable setters for structs and tuples?

William Dillon william at housedillon.com
Wed Mar 23 09:28:21 CDT 2016


I like this.  I’m always annoyed when I need var just because I can’t get all my initialization done with let.

- Will

> On Mar 23, 2016, at 2:32 AM, Brent Royal-Gordon via swift-evolution <swift-evolution at swift.org> wrote:
> 
>> let john = {firstName="John"; lastName="Doe"}
>> let alice = {john with FirstName="Alice"}
>> 
>>  Current way to do this in Swift is:
>> 
>> let john = (firstName:"John", lastName:"Doe")
>> var alice = john
>> alice.firstName = "Alice"
> 
> I think this is better modeled in Swift as something like:
> 
> 	let john = (firstName:"John", lastName:"Doe")
> 	let alice = with(john) {
> 		$0.firstName = "Alice"
> 	}
> 
> `with` would be something like:
> 
> 	func with<Value>(value: Value, function: Value throws -> Void) rethrows -> Value {
> 		var mutableValue = value
> 		return try function(&mutableValue)
> 	}
> 
> This would serve many different purposes:
> 
> * If the value is a value type, allows you to return a modified copy
> * Allows you to customize a value's properties immediately after initializing it, which many people have asked for
> * Acts as a `tap` function when the block doesn't change the value (see <http://ruby-doc.org/core-2.3.0/Object.html#method-i-tap>)
> 
> -- 
> Brent Royal-Gordon
> Architechies
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution



More information about the swift-evolution mailing list