Swift 3: The difference between Public and Internal access modifiers?

前端 未结 6 1750
孤独总比滥情好
孤独总比滥情好 2020-12-15 09:16

I read the Apple\'s reference about access modifiers in Swift 3. I read also about the same on stackoverflow but I didn\'t get an answer as the person who asked. As I unders

相关标签:
6条回答
  • 2020-12-15 09:39
    • Internal - This is default access specifier in swift. With this we can access data members and member functions in the same module (target).

    • Public - This is where you can access all data members and member functions within same module and outside of it. But you can't subclass or override outside the module.

    • Open - same as public, only difference is you can subclass or override outside the module.

    • Fileprivate - As the name say's, data members and member functions are accessible within the same file.

    • Private - This is where you can have access within the scope of function body or class.

    0 讨论(0)
  • 2020-12-15 09:49

    Your diagram is just incorrect.

    Public members of A.swift and B.swift are available to C.swift and D.swift. The only restriction is that classes can't be subclassed (they would need to be open.

    0 讨论(0)
  • 2020-12-15 09:49

    The The Swift Programming Language book from Apple clearly explains these access modifiers:

    “Swift provides five different access levels for entities within your code. These access levels are relative to the source file in which an entity is defined, and also relative to the module that source file belongs to.

    Open access and public access enable entities to be used within any source file from their defining module, and also in a source file from another module that imports the defining module. You typically use open or public access when specifying the public interface to a framework. The difference between open and public access is described below.

    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.

    File-private access restricts the use of an entity to its own defining source file. Use file-private access to hide the implementation details of a specific piece of functionality when those details are used within an entire file.

    Private access restricts the use of an entity to the enclosing declaration. Use private access to hide the implementation details of a specific piece of functionality when those details are used only within a single declaration

    Excerpt From: Apple Inc. “The Swift Programming Language (Swift 3.1).” iBooks. https://itun.es/gb/jEUH0.l”

    0 讨论(0)
  • 2020-12-15 09:50

    Depends on access modifier of class, function or property it can be subclassed, overrode, accessible

    Access modifier can be applicable for class, field[About], method. Try to access, subclass or override this.

    • Access to field or method is through a class
    • Inheritance and Open Closed Principle. Successor class(subclass) access modifier should be the same or restrict it(except private <-> fileprivate). Successor method(override) access modifier should be the same or expand it

    [Java access modifiers]

    0 讨论(0)
  • 2020-12-15 10:01

    Whatever you marked as public can be used within your app and outside of your app(module). If you marked something as internal that can only be used within your app(module). This is very helpful when you're developing a library (framework), you can use internal to hide library structure.

    0 讨论(0)
  • 2020-12-15 10:05
    •   Public - Can be used from any module but can’t be subclassed outside defining module (target).
    
    •   Internal - This is default access modifier in swift. Can be accessible from the defining module (target) only.
    
    •   Open - Can be used from any module and can be subclassed outside defining module (target).
    
    •   Swift 4+
    
    •   Fileprivate - Fileprivate members and functions are accessible within the same file, within the extension in same file, and extension in other file also.

    
    •   Private - Private members and functions are accessible within the same file, within the extension in same file.
    
    0 讨论(0)
提交回复
热议问题