- Bài 1: Tổng quan ngôn ngữ Swift
- Bài 2: Hướng dẫn cài đặt Xcode và chạy một playground
- Bài 3: Những cú pháp cơ bản trong swift
- Bài 4: Kiểu dữ liệu
- Bài 5: Toán tử trong ngôn ngữ lập trình Swift
- Bài 6: Câu lệnh rẽ nhánh trong swift – Decision Making
- Bài 7: Chuỗi ký tự trong Swift - Character và String
- Bài 8: Vòng lặp trong swift – Loops
- Bài 9: Mảng Array trong swift
- Bài 10: Dictionary trong swift
- Bài 11: Optional trong Swift
- Bài 12: Functions trong swift
- Bài 13: Closure trong swift
- Bài 14: Enumeration trong swift
- Bài 15: Struct trong swift
- Bài 16: Classes trong swift
- Bài 17: Properties trong swift
- Bài 18: Methods trong swift
- Bài 19: Subscripts trong swift
- Bài 20: Inheritance trong swift
- Bài 21: Initialization trong swift
- Bài 22: Deinitialization trong swift
- Bài 23: ARC trong swift
- Bài 24: Type casting trong swift
- Bài 25: Extensions trong swift
- Bài 26: Protocols trong swift
- Bài 27: Generics trong swift
- Bài 28: Access control trong swift
Bài 28: Access control trong swift - Lập trình Swift cơ bản
Đăng bởi: Admin | Lượt xem: 2774 | Chuyên mục: Swift
Định nghĩa
Access control có tính năng hạn chế quyền truy cập vào các phần trong code của bạn từ các đoạn code trong files hay modules và nó cho phép các chi tiết trong code được ẩn và chỉ định những phần code mà mã đó có thể được truy cập và sử dụng.
Ngoài ra, lập trình viên có thể cho phép, cấp quyền truy cập cho các hàm như class, properties, struct, initializers hay subscript. Không những thế Swift còn cung cấp giá trị mặc định cho code để giảm sự phức tạp trong việc Access control.
Modules và Source Files
Mỗi module là một đơn vị phân phối code, một ứng dụng mà nó đựng xây dựng, tạo nên như một đơn vị và import vào những module khác với từ khoá 'import' trong Swift.
Access Levels
Có 5 mức độ access khác nhau mà Swift cung cấp, những mức độ access này sẽ có mối tương quan với các file nguồn trong 1 entity đã được xác định sẵn.
Access Levels
Đây là mức độ cho phép truy cập của các access level.
Open & public > Internal > File-private > Private
- Open và public: cho phép function, class,.. có thể truy cập và sử dụng ở bất kỳ file nào.
open class OpenClass {
open var aProperty = true // property này có thể được gọi ở mọi file trong module có import module này.
open func aFunction() {
}
public init() {
}
}
- Internal access: cho phép các đối tượng có thể được truy cập và sử dụng ở từ bất kỳ 1 file khác trong cùng 1 module Ví dụ:
internal class LoginViewController: UIViewController {
// property này có thể được gọi ở file khác trong cùng module hiện tại
internal var aProperty = true
// function này có thể được gọi ở file khác trong cùng module hiện tại
internal func aFunction() {
}
}
- fileprivate access: là 1 access control giới hạn trong 1 file, thường dùng cho extension. Ví dụ:
// SignUpViewController.swift
class SignUpViewController: UIViewController {
fileprivate var username = ""
fileprivate var password = ""
fileprivate func login() {
}
}
=> các thuộc tính username, password và function login chỉ có thể được gọi đến từ những đoạn code trong file: SignUpViewController.swift thôi.
- Private access: chỉ cho phép sử dụng trong scope và Swift. Ví dụ:
class Register: UIViewController {
private var name = ""
private var email = ""
private func register() {
}
}
extension Register {
private func setup() {
register() // Đúng. Mặc dù func register() là private nhưng vẫn call được trong extension của nó
}
}
class OtherClass {
init() {
let register = Register()
register.register() // Sai. func register() đã private không gọi được từ file khác hay class khác.
}
}
Open access là có quyền truy cập cao nhất và private access có quyền truy cập thấp nhất.
Default Access Levels
Trong một số trường hợp lập trình viên không cần phải chỉ định access level cho code do tất cả các access level trong từng đoạn code đều được mặc định là internal access.
Access Levels for Single-Target Apps
Thông thường, đối với 1 app đơn giản, lập trình viên không cần phải code bổ sung thêm ở ngoài module của app nữa. Vì vậy, Access level là internal access là lựa chọn tối ưu cho yêu cầu này, bạn hoàn toàn không cần điều chỉnh nhiều mà app vẫn chạy tốt.
Access Levels for Frameworks
Khi bạn code 1 framework điều đầu tiên bạn cần làm là để open hoặc public. Điều này khiến cho nó có thể truy cập và sử dụng từ những module khác .
Access Control Syntax
Việc duy nhất bạn cần làm để có access control là thêm access level vào trước chỗ khai báo đối tượng.
Bạn có thể tham khảo ví dụ dưới đây để hiểu hơn nhé.
public class SomePublicClass {}
internal class SomeInternalClass {}
fileprivate class SomeFilePrivateClass {}
private class SomePrivateClass {}
public var somePublicVariable = 0
internal let someInternalConstant = 0
fileprivate func someFilePrivateFunction() {}
private func somePrivateFunction() {}
Trong trường hợp access level là internal (default level). Bạn không cần thêm internal cũng được:
class SomeInternalClass {} // ngầm hiểu là internal
let someInternalConstant = 0 // ngầm hiểu là internal
Custom Types
Để chỉ định access level cho 1 custom type thì bắt buộc phải chỉ định nó khi định nghĩa chúng. Access control của 1 type sẽ gây ảnh hưởng đến access level của các property hay methods, initializers, subscripts của type đó.
Ví dụ như: Nếu bạn định nghĩa 1 class là private thì các đối tượng trong đó cũng là private, Nếu bạn khai báo 1 class là internal hoặc public thì các đối tượng trong đó nếu không chỉ định sẽ được hiểu là internal.
Ví dụ:
Tuple Types
Access level cho tuple được hiểu là mức access hạn chế nhất trong tất cả các loại được sử dụng trong bộ dữ liệu đó.
Enumeration Types
Các trường hợp của enum sẽ tự động nhận cùng access level với enum mà chúng phụ thuộc chứ bạn không thể chỉ định access level khác cho từng trường hợp của enum.
Trong ví dụ dưới đây: CompassPoint là enum public nên tất cả các case của nó đều có quyền truy cập public:
public enum CompassPoint {
case north
case south
case east
case west
}
Constants, Variables, Properties, and Subscripts
1 constant, variable, hoặc property không thể có quyền truy cập lớn hơn Type của nó.
Nếu 1 constant, variable, property hoặc subscript sử dụng Type private thì chúng phải được chỉ định là private private var privateInstance = SomePrivateClass()
Theo dõi VnCoder trên Facebook, để cập nhật những bài viết, tin tức và khoá học mới nhất!
- Bài 1: Tổng quan ngôn ngữ Swift
- Bài 2: Hướng dẫn cài đặt Xcode và chạy một playground
- Bài 3: Những cú pháp cơ bản trong swift
- Bài 4: Kiểu dữ liệu
- Bài 5: Toán tử trong ngôn ngữ lập trình Swift
- Bài 6: Câu lệnh rẽ nhánh trong swift – Decision Making
- Bài 7: Chuỗi ký tự trong Swift - Character và String
- Bài 8: Vòng lặp trong swift – Loops
- Bài 9: Mảng Array trong swift
- Bài 10: Dictionary trong swift
- Bài 11: Optional trong Swift
- Bài 12: Functions trong swift
- Bài 13: Closure trong swift
- Bài 14: Enumeration trong swift
- Bài 15: Struct trong swift
- Bài 16: Classes trong swift
- Bài 17: Properties trong swift
- Bài 18: Methods trong swift
- Bài 19: Subscripts trong swift
- Bài 20: Inheritance trong swift
- Bài 21: Initialization trong swift
- Bài 22: Deinitialization trong swift
- Bài 23: ARC trong swift
- Bài 24: Type casting trong swift
- Bài 25: Extensions trong swift
- Bài 26: Protocols trong swift
- Bài 27: Generics trong swift
- Bài 28: Access control trong swift