> On 10 Apr 2017, at 05:08, Jose Cheyo Jimenez via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> 
>> On Apr 9, 2017, at 7:14 PM, Jonathan Hull via swift-evolution 
>> <swift-evolution@swift.org> wrote:
>> 
>> This struck me as a bit odd at first, but the more I think about it, the 
>> more I really like the ability to nest extensions/scopes.  The one issue I 
>> see is sticking that public extension inside a private one.  I think you 
>> would have to mark ‘secret: Int’ as private instead of the extension itself 
>> to allow the effect you are looking for...
>> 
>> What I ultimately want is the ability to declare storage in extensions in 
>> the same submodule. Combining that with fileprivate will allow the same 
>> tricks without the indentation (together in their own file).  This nesting 
>> will help in the mean-time (and would still be useful after for those who 
>> prefer to organize their code in fewer/longer files).  I think it could be 
>> helpful in other ways too…
> 
> What do you think of `partial` types like C# but limited to a file?
> https://msdn.microsoft.com/en-us/library/wbx7zzdd.aspx
> 
> https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20170403/035360.html
> 

That's the direction the new proposal (0169) is going towards with extensions 
in the same file.

> 
>> 
>> Thanks,
>> Jon
>> 
>>> On Apr 8, 2017, at 5:03 AM, Tino Heth via swift-evolution 
>>> <swift-evolution@swift.org> wrote:
>>> 
>>> Imho there is a simple solution to reach the goals of SE-0169 without 
>>> breaking compatibility:
>>> Just allow extensions inside type declarations.
>>> 
>>> class MyVC: UIViewController {
>>>     private let numberOfSections = 0
>>> 
>>>     extension: UITableViewDataSource {
>>>         // Skipping the class and assume we want to extend the surrounding 
>>> type
>>>         func numberOfSections(in tableView: UITableView) -> Int {
>>>             return numberOfSections
>>>         }
>>> 
>>>         func tableView(_ tableView: UITableView, numberOfRowsInSection 
>>> section: Int) -> Int {
>>>             return 0
>>>         }
>>>     }
>>> 
>>>     private extension {
>>>         // this would contain everything that shoudn't be visible for other 
>>> extensios
>>> 
>>>         var secret: Int = 0
>>> 
>>>         public extension MyFriendClass {
>>>             // oh, well, I make an exception here for a trustworthy type
>>>             func checkSecret(of controller: MyVC) -> Bool {
>>>                 return controller.secret > 0
>>>             }
>>>         }
>>> 
>>>         private extension {
>>>             // this is so secret, I'm not even allowed to copy it
>>>         }
>>>     }
>>> 
>>>     public func myMethod() {
>>>         print("This is just a boring method")
>>>     }
>>> }
>>> 
>>> It has the downside of shifting code to the right (you could as well leave 
>>> those extension-blocks unindented), but lots of advantages:
>>> - No change for private needed
>>> - It can be nested as much as you like to satisfy even the most absurd 
>>> desires of encapsulation
>>> - It reminds me on operator definitions inside type declarations 
>>> - No change for fileprivate needed (but actually, I think there is very 
>>> little need to keep fileprivate)
>>> 
>>> I wish this would only be a joke, but writing the example, I actually 
>>> started liking the concept (but I have a terrible headache right now which 
>>> might affect my mind) — so either this receives some feedback, or I might 
>>> start re-proposing this ;-)
>>> 
>>> - Tino
>>> _______________________________________________
>>> swift-evolution mailing list
>>> swift-evolution@swift.org
>>> https://lists.swift.org/mailman/listinfo/swift-evolution
>> 
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution@swift.org
>> https://lists.swift.org/mailman/listinfo/swift-evolution
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to