<html><head></head><body>No please no, the ship is long sailed for this one. I wish I didn‘t messed up my proposal last year and that we completely got rid of the access modifiers before the `extension` keyword.<div><br></div><div>Huge -1<br> <br><div class="bloop_sign"><div style="font-family:helvetica,arial;font-size:13px">--&nbsp;<br>Adrian Zubarev<br>Sent with Airmail</div></div> <p class="gmail_quote" style="color:#000;">Am 28. September 2017 um 19:44:25, James Valaitis via swift-evolution (<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>) schrieb:</p> <blockquote type="cite" class="gmail_quote"><span><div><div></div><div>When declaring a public class or struct the properties still default to internal.<br>```<br>public final class NewType {<br>        /// This property defaults to internal.<br>        var property: Any?<br>}<br>```<br><br>This is not the same for a public extension on the type, where then the access modifier is respected for any function or calculated property within the extension.<br>```<br>public extension NewType {<br>        /// This function inherits the public modifier.<br>        func function() {<br>        }<br>}<br>```<br><br>I dislike this inconsistency, and I frequently find that when using my dynamic frameworks my code will not compile, and it will be due to my accidentally writing a public struct but not declaring the properties public.<br><br>I believe in the idea that explicitly stating the access modifier leads to more legible code, but in my opinion it can be overdone, and I much prefer to explicitly state my intentions in the modifier on the definition or extension. For example:<br><br>```<br>public struct Coordinate {<br>        /// Should default to public.<br>        let latitude: Double<br>        /// Should default to public.<br>        let longitude: Double<br>        /// Should default to public<br>        init?(latitude: Double, longitude: Double) {<br>                guard validate(latitude: latitude, longitude: longitude) else { return nil }<br>                …<br>        }<br>}<br>internal extension Coordinate {<br>        /// Convenience initialiser to me used internally within the module.<br>        init(coordinate: CLLocationCoordinate2D) {<br>                …<br>        }<br>}<br>private extension Coordinate {<br>        /// Private validation of the coordinate.<br>        func validate(latitude: Double, longitude: Double) -&gt; Bool {<br>                …<br>        }<br>}<br>```<br><br>This is legible and intuitive. The current behaviour is not.<br><br>_______________________________________________<br>swift-evolution mailing list<br>swift-evolution@swift.org<br>https://lists.swift.org/mailman/listinfo/swift-evolution<br></div></div></span></blockquote>

</div></body></html>