[swift-evolution] Properties on Default Protocol Implementations
    Brent Royal-Gordon 
    brent at architechies.com
       
    Tue Jan 12 01:11:29 CST 2016
    
    
  
> An automatic approach brings hesitation to me, because I don’t want it to be the difference between:
> 
> protocol P {
>  var x : Int { get }
> }
> 
> and:
> 
> protocol P {
>  var x : Int 
> }
> 
> Did I want a PwS there, or did I just forget {get/set}?
If we're going to start adding concrete things to protocols—not just stored properties, but (drawing on other proposals) perhaps also default implementations, final members, factory initializers, etc.—perhaps we should start marking the things that *aren't* concrete with `required`.
Currently:
	public protocol Strideable : Comparable, _Strideable {
	    associatedtype Stride : SignedNumberType
	    @warn_unused_result
	    public func distanceTo(other: Self) -> Self.Stride
	    @warn_unused_result
	    public func advancedBy(n: Self.Stride) -> Self
	}
	
	extension Strideable {
	    @warn_unused_result
	    public func stride(to end: Self, by stride: Self.Stride) -> StrideTo<Self> {
	        /* implementation here */
	    }
	}
	
	extension Strideable {
	    @warn_unused_result
	    public func stride(through end: Self, by stride: Self.Stride) -> StrideThrough<Self> {
	        /* implementation here */
	    }
	}
Future:
	public protocol Strideable : Comparable, _Strideable {
	    associatedtype Stride : SignedNumberType
	    @warn_unused_result
	    required public func distanceTo(other: Self) -> Self.Stride
	    @warn_unused_result
	    required public func advancedBy(n: Self.Stride) -> Self
	    
	    @warn_unused_result
	    final public func stride(to end: Self, by stride: Self.Stride) -> StrideTo<Self> {
	        /* implementation here */
	    }
            
	    @warn_unused_result
	    final public func stride(through end: Self, by stride: Self.Stride) -> StrideThrough<Self> {
	        /* implementation here */
	    }
	}
-- 
Brent Royal-Gordon
Architechies
    
    
More information about the swift-evolution
mailing list