John,

Sure, that is the pattern most commonly adopted for these cases but it does in 
fact create a considerable amount of boilerplate code.  My hope was to reduce 
the amount of boilerplate and the burden to create such a common pattern of 
functionality.

I do understand that the implementation would be complex.  I am imagining that 
these observers would get magically called when someone adds or removes the 
collection.  The wrinkle I think you’re referring to is the fact that there are 
a variety of ways in which a collection can be 'added to' and 'removed from’.  
Is that the complexity you are referring to?

Sean



> On Mar 30, 2017, at 2:58 PM, John McCall <[email protected]> wrote:
> 
>> On Mar 30, 2017, at 2:37 PM, Sean Alling via swift-evolution 
>> <[email protected] <mailto:[email protected]>> wrote:
>> PROPOSAL:
>> 
>> I propose the addition of the following new property observers applicable to 
>> all Collection types (Dictionary, Set, and Array):
>> 
>> – willAdd(newValue) { … }
>> – didAdd(newValue) { … }
>> 
>> – willRemove(oldValue) { … }
>> – didRemove(oldValue) { … }
>> 
>> where, `newValue` and `oldValue` are immutable.
>> 
>> This would allow one to perform additional work or observer logic to values 
>> added and removed from collections.  This model is consistent with Swift 
>> syntax and may perhaps minimize the use of NSNotifications in some 
>> situations.
>> 
>> Currently, in order to perform this functionality some filtering and 
>> comparison logic would have to be performed from within a `willSet { … }` 
>> and `didSet { …}` call.  This change would not only ease that burden but 
>> promote a more visible and explicit expression that can further improve 
>> readability and traceability of functionality.
> 
> Figuring out that an arbitrary change to a collection is an "add" or a 
> "remove" of a specific element is, well, let's just say it's complex.  If 
> you're imagining that these observers would just get magically called when 
> someone called the add or remove method on the property, that's not really 
> how these language features work together.
> 
> The property behaviors proposal would let you do things like automatically 
> computing differences and calling these observers, if you really want to do 
> that.  But the better solution is almost certainly to (1) make the collection 
> property private(set) and (2) just declare addToList and removeFromList 
> methods that do whatever you would want to do in the observer.
> 
> John.
> 
>> 
>> 
>> EXAMPLE USAGE:
>> 
>> var list = [objects]() {
>>      willAdd(newValue) {
>>              … 
>>      }
>>      didAdd(newValue) {
>>              …
>>      }
>> }
>> 
>> var list = [key : object]() {
>>      willRemove(oldValue) {
>>              …
>>      }
>>      didRemove(oldValue) {
>>              …
>>      }
>> }
>> 
>> 
>> -----
>> Sean Alling
>> [email protected] 
>> <mailto:[email protected]>_______________________________________________
>> swift-evolution mailing list
>> [email protected] <mailto:[email protected]>
>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to