Yes, there are valid use cases. For example, in case of many UI elements, you do not have control over their instantiation and need to associate a "help description" with them as an example. Which can be done by an additional property helpDescription added to NSView/UIView.
Another example that I've used is with CoreData, where you can store additional information on the MOC - NSManagedObjectContext is strongly discouraged from being subclassed. Example of the additional information is a synchronization manager assigned to the MOC. And since in Swift, classes can be final, there may not be a way to subclass the class to add your properties instead. IMHO, it is a valid request to be able to add additional stored properties via extensions. > On Oct 10, 2016, at 9:15 PM, Charles Srstka <[email protected]> wrote: > > Right. The question is whether we *need* to add stored properties > out-of-module, and what the use case for that is. To me it seems that adding > them in-module is by far the more common use case, for the purposes of > implementing protocols. > > At any rate, the rewrite option would be a great addition to Swift regardless > of what our answer to the first question is. > > Charles > >> On Oct 9, 2016, at 4:32 PM, Jay Abbott <[email protected] >> <mailto:[email protected]>> wrote: >> >> Charles, >> >> That would be good. It is a nicer way to write what is already possible to >> achieve, but it's not a way to 'implement' stored properties in extensions. >> >> On Sun, 9 Oct 2016 at 21:45 Charles Srstka <[email protected] >> <mailto:[email protected]>> wrote: >> *Replace both instances of “class C: P” with just “class C” since the >> conformance comes in the extension. That’s what I get for writing this >> quickly. >> >> Charles >> >>> On Oct 9, 2016, at 3:43 PM, Charles Srstka <[email protected] >>> <mailto:[email protected]>> wrote: >>> >>> protocol P { >>> var foo: String { get } >>> func bar() >>> } >>> >>> protocol Q { >>> var baz: Int { get } >>> func qux() >>> } >>> >>> class C: P { >>> var foo: String // <- what is this doing here? >>> var baz: Int // <- ditto >>> } >>> >>> extension C: P { >>> func bar() {} >>> } >>> >>> extension C: Q { >>> func qux() {} >>> } >>> >>> we could simply: >>> >>> protocol P { >>> var foo: String { get } >>> func bar() >>> } >>> >>> class C: P {} >>> >>> extension C: P { >>> var foo: String >>> func bar() {} >>> } >>> >>> extension C: Q { >>> var baz: Int >>> func qux() {} >>> } >> >
_______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
