You may prefer this?

In ViewController

For each child in children
   child.displayTo(self)

In each class such as Address

Function displayTo(ViewController: target)
    target.display(self)

This ought to work as the type of self will be precisely Address. You may be 
able to turn this into a protocol ViewController implements if you want to 
decouple further. 

Some languages do support the kind of method overloading you were looking for 
(late binding based on the type of all the parameters). Eg. Scala does but 
Swift and Java do not for example. 

To be honest, if Address, Order and Person share nothing in common I would 
avoid overloading here and just write displayPerson etc, but I’m trying to 
answer your question and not redesign your whole solution. Give it some 
thought. 

Andrew

>> On Oct 28, 2019, at 1:03 AM, Devarshi Kulshreshtha 
>> <devarshi.bluec...@gmail.com> wrote:
> 
> So the other thing which came to my mind was similar to what you have 
> suggested:
> 
> a. Declare Displayable protocol with func display()
> b. Let each Model implement this protocol
> c. Within forEach on children I can just bind and typecast to the protocol 
> and invoke display method on it
> 
> However this looks like an ugly solution to me as Model is now serving 2 
> responsibilities - i. Handle/ Store data, ii. Handle how the data is 
> displayed. The 2nd responsibility looks to me like more reasonable for a 
> controller or presenter class to implement rather than the model class, hence 
> I want to avoid that path.
> 
>> On Sun, Oct 27, 2019 at 7:55 PM Andrew Thompson <lordpi...@mac.com> wrote:
>> 
>> > Is there any other elegant way to achieve the desired behavior without
>> > using `if-let + typecasting`?
>> 
>> 
>> One way is to use classes instead on structs and define display as a method 
>> on those classes. I’m no Swift  expert but I expect you may find value in 
>> making display() into a protocol. 
>> 
>> 
>> Andrew
> 
> 
> -- 
> Thanks,
> 
> Devarshi
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to