I have gone through the Apple provided document i.e https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/AccessControl.html
Here, it explains:
Classes with public access, or any more restrictive access level, can be subclassed only within the module where they’re defined.
Internal access enables entities to be used within any source file from their defining module, but not in any source file outside of that module. You typically use internal access when defining an app’s or a framework’s internal structure.
Open classes can be subclassed within the module where they’re defined, and within any module that imports the module where they’re defined
I am not finding the exact difference between the public and Internal access.
My research includes http://www.globalnerdy.com/2014/07/23/a-first-look-at-swifts-new-access-levels/ as well. But as per swift3.3 documentation, its not clear.