title: Swift 'open' keyword & overridable method/properties in extension?
body: <p>With introduction of <code>open</code> keyword in Swift 3.0 (<a href="https://stackoverflow.com/questions/38947101/what-is-the-open-keyword-in-swift">What is the 'open' keyword in Swift?</a>).</p>
  <p>Note: Limited to extensions on <code>NSObject</code> derived classes or <code>@objc</code> attributed method/properties.</p>
  <p>Code which declared and used <code>public</code> (<code>class</code>) methods/properties in extension <em>across</em> modules/frameworks broke, as <code>public</code> is no longer means 'overridable' outside of defining module.</p>
  <p>Example:</p>
  <pre><code>public extension UIManagedDocument {
  
      public class func primaryDocumentName() -&gt; String {
          return &quot;Document&quot;
      }
  
      public class func primaryStoreURL() -&gt; URL {
          let documentsURL = FileManager.default.userDocumentsURL
          return URL(fileURLWithPath: self.primaryDocumentName(), isDirectory: false, relativeTo: documentsURL)
      }
  
      public class func primaryModelName() -&gt; String? {
          return &quot;Model&quot;
      }
  
  }
  </code></pre>
  <ul>
  <li>Original proposal (<a href="https://github.com/apple/swift-evolution/blob/master/proposals/0117-non-public-subclassable-by-default.md" rel="nofollow noreferrer">SE-0117</a>) is focused on subclassing and doesn't mention extensions.</li>
  <li>Currently extensions do not support <code>open</code> keyword (you can't write <code>open extension NSObject</code> as well as <code>open func Method()</code>)</li>
  </ul>
  <p><strong>Question</strong>: Is there workaround to be able override extension provided methods/properties <em>across</em> modules/frameworks?</p>