[swift-evolution] [Pitch] Allow nested protocol declarations

Krishna Kumar kkdevenda at gmail.com
Fri Apr 29 02:56:43 CDT 2016


Hey Brad

+1 I think this will make delegate controller pattern a lot more clean and readable.

I was thinking about other areas where this can be useful, and I thought it will be great for property injection from parent controller to children.

class ParentController{
    protocol Injection: class{
        
    }
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?){
        let childVC = segue.destinationViewController as? Injection
        ...
    }
}

class ChildController: ParentController.Injection{
    
}


Does this make sense?

-Krishna

> On Apr 28, 2016, at 10:45 PM, Brad Hilton via swift-evolution <swift-evolution at swift.org> wrote:
> 
> Type nesting allows some convenient and straightforward semantics that we see inside the Swift standard library such as views on String like String.CharacterView, String.UnicodeScalarView, etc. However a protocol cannot be nested in a type and gives a non-obvious error that the “Declaration is only valid at file scope.” Just as other nested types allow proper contextual scoping, a nested protocol could make a lot sense for a number of patterns. For example, there are many “Delegate” protocols throughout the Cocoa frameworks. Here’s a controller/delegate pattern before and after type nesting:
> 
> // Without type nesting
> 
> protocol MyControllerDelegate : class {
>     
> }
> 
> class MyController {
>     
>     weak var delegate: MyControllerDelegate?
>     
> }
> 
> // With type nesting
> 
> class MyController {
>     
>     weak var delegate: Delegate?
>     
>     protocol Delegate : class {
>         
>     }
>     
> }
> 
> Though the change is mostly semantics, it does allow an explicit association between My Controller and the Delegate instead of only a named association. It also cleans up the module name space like other nested types and makes associated protocols more discoverable in my opinion. 
> 
> I’d love to hear everyone’s thoughts.
> 
> Brad Hilton
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160429/5073c1ae/attachment.html>


More information about the swift-evolution mailing list