<div dir="ltr">TL;DR<div><br></div><div>Thinking about some problems presented here this mailing list. I believe that by following the same concepts behind the default protocol implementations, allowing the same mechanism to provide default properties can be a remarkable gain for language.</div><div><br></div><div>Rationale:</div><div><br></div><div><div>It has been proposed here also on this list, a need to produce abstract classes, one of the reasons that need, is because is not possible to declare properties in the same way as we declare default implementation on protocols.</div><div>I also believe that this can help in the concept of multiple inheritance, and serve as an aid to the default implementation on protocols, and &quot;complete&quot; the Protocol-Oriented Programming concept.</div><div><br></div><div>For example:</div><div><br></div><div><div>protocol Named {</div><div>    var name: String { get }</div><div>}</div><div>protocol Aged {</div><div>    var age: Int { get }</div><div>}</div><div>struct Person: Named, Aged {</div><div>    var name: String</div><div>    var age: Int</div><div>}</div><div><br></div><div>extension Aged where Self: Named {    </div><div>    func wishHappyBirthday() { // regular default implementation</div><div>        print(&quot;Happy birthday \(<a href="http://self.name">self.name</a>) - you&#39;re \(self.age)!&quot;)</div><div>    }</div><div>    var birthdayVideo: AVPlayerItem? // nil is a default value</div><div>}</div></div><div><div>...</div><div>func playBirthdayMediaFrom(person: Person){</div><div>    var avPlayer = AVPlayer(playerItem: person.birthdayVideo)</div><div>    // etc...</div><div>}</div></div><div><br></div><div>One of thousands of using this feature is to prevent us to create variables that are not actually part of the data model we are shaping.<br></div><div><br></div><div><div>birthdayVideo in this case would be any variable that is not part of our model, but need to be associated with the object (or structure) in some context of our application. (And not be used anywhere else in the APP or another API).</div><div><br></div><div>Other examples maybe a counter helper, weak reference to something, etc. There is a infinite examples when we need to declare some variable just to make the &quot;api&quot; happy like add a observer, holding some value, and use this again to removeobserver in dealloc.</div></div><div><br></div><div>I believe that the same rules and the same mechanisms involving default implementation functions, should govern this default property implementation, and any discussion about it on the problems on protocols rules should be made separate this thread.</div></div><div><br></div><div><br></div></div>