Access Control In Swift


Introduction


To restrict access code blocks or modules, abstraction is done through access control. Like other programming languages swift also provides option to restrict access to properties, types, functions, and so on. In other programming languages like C# and Java developers are used to working with class member access level modifiers like public,private, and protected. In swift access level modifiers too but they are just a little bit different from other programming languages.


Modules and Source Files


In swift access control is based on the concept of modules and source files.

A module is a single unit of code distribution like a framework or application that is built and delivered as a single unit and that can be imported by another module with swift’s import keyword.

A source file is a single Swift source code file within a module(a single file within an app or framework). It is common to define individual types in separate source files, a Single source file can contain definitions for multiple types, functions, and so on.


Access Levels


Public

Public access level is the least restriction applied to a member and normally used when writing public interfaces.

Public access level enables entities (properties, types, functions, and so on) 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 public access when specifying the public interface to a framework.

Internal

internal access level allows to use any code that in the same module (application or framework) can use the entities.

Internal access enables entities to be used within any source file from their defining module (application or framework), but not in any source file outside of that module (application or framework).

This is a default access level.

Private

Private access restricts the use of an entity to its own defining source file only.

It means that only code in the same source file can use the entity.

Use private access to hide the implementation details of functionality.


Swift access levels are file based not class based.

Access Control Syntax


When use default access level internal, no need to add internal.


Custom Types



Subclassing



Constants, Variables, Properties, and Subscripts


A constant, variable, or property cannot be more public than its type. It is not valid to write a public property with a private type, for example. Similarly, a subscript cannot be more public than either its index type or return type.

If a constant, variable, property, or subscript makes use of a private type, the constant, variable, property, or subscript must also be marked as private:

The example below defines a structure called MyString, which keeps track of the number of times a string property is modified:

If you create a MyString instance and modify its string value a few times, you can see the numberOfEdits property value update to match the number of modifications.

Although you can query the current value of the numberOfEdits property from within another source file, you cannot modify the property from another source file.

This restriction protects the implementation details of the MyString edit tracking functionality, while still providing convenient access to an aspect of that functionality.

 

I hope you will find this post very useful regarding access control in swift. Let me know if you have any question regarding swift in comment . I will reply to you ASAP.

Have you got cool idea about iPhone App Development? Contact us Now to get free consultation on your idea. Alphanso Tech is rated as one of the best iPhone App Development Company in India.

Post by Milan Sanathara

I am iOS Application Developer with an aspiration of learning new technology and creating a bright future in Information Technology.

One Response to Access Control In Swift

  1. Sasha Prokhorenko

    Thank you for the post!
    I’m clearly understand how access control works.
    But could you explain, please, WHY we need to use different types of access control?

Leave a Reply

Your email address will not be published. Required fields are marked *