天天看點

open > public > interal > fileprivate > private

//
//  ViewController.swift
//  通路控制關鍵詞
//

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        let a = A()
        a.openMethod()
        // 等級排序如下:
        // open > public > interal > fileprivate > private
    }
}


class A {
    // 1.可以被任何人使用
    // 2.也可以被override和繼承,這是和public的差別
    open func openMethod(){
        print("openMethod")
    }

    // 1.使用public修飾的類,屬性或方法,可以被任何類通路,
    // 2.但在module外不可以被override和繼承,而在module内可以;
    // 3.需要import的就是module外,隻能通路引入子產品中public修飾的屬性或者方法而不可以繼承。
    // 4.❤️一個App就是一個子產品,一個第三方API, 第三等方架構等都是一個完整的子產品,這些子產品如果要對外留有通路的屬性或者方法,就應該使用public的通路權限。
    public func publicMethod(){
        print("publicMethod")
    }

    // internal: internal通路權限的屬性和方法說明在子產品内部可以通路,超出子產品内部就不可被通路了。
    // 在Swift中預設就是internal的通路權限
    internal func internalMethod(){
        print("internalMethod")
    }

    // fileprivate來顯式的表明,這個元素的通路權限為檔案内私有。
    fileprivate func filePrivateMethod(){
        print("filePrivateMethod")

    }

    // private則是真正的私有,離開了這個類或者結構體的作用域外面就無法通路
    private func PrivateMethod(){
        print("PrivateMethod")
    }



}