Swift 系統學習 28 類的訪問權限

import UIKit
/**
  本節主要內容
 1.類的訪問權限
 
 */
//controller裏面

let app  = App(name: "Clarence")
app.show()
app.switchMode()
app.show()
app.switchMode()
app.show()

//UI.swift
import Foundation
import UIKit

// internal
enum Theme {
    case DayMode
    case NightMode
}

// public: 模塊外可見(Contents.swift可見)
// internal是默認的權限設置, 可以省略
// internal
class UI {
    // 聲明私有屬性(App類不可見)
    // fontColor一定有值
    private var fontColor: UIColor!
    private var backgroundColor: UIColor!
    
    var themeMode: Theme = .DayMode {
        didSet {
            // 賦值成功, 調用私有方法, 切換主題
            self.changeTheme(themeMode: themeMode)
        }
    }
    
    // 對App可見
    init() {
        self.themeMode = .DayMode
        self.changeTheme(themeMode: self.themeMode)
    }
    
    // App類不可見
    private func changeTheme(themeMode: Theme) {
        switch themeMode {
        case .DayMode:
            fontColor       = UIColor.black
            backgroundColor = UIColor.white
        case .NightMode:
            fontColor       = UIColor.white
            backgroundColor = UIColor.black
        }
    }
    
    // public/internal
    func show() {
        print("The font color is \(fontColor == UIColor.white ? "White" : "Black")")
        print("The background color is \(backgroundColor == UIColor.white ? "White" : "Black")")
    }
  }



//app.swift
import Foundation

// 很多個類型: 類/結構體/枚舉
public class App {
    // 聲明私有屬性
    private let ui = UI()
    public var name: String
    
    // 構造方法
    public init(name: String) {
        self.name = name
    }
    
    // 切換模式方法(Content.swift文件可見)
    public func switchMode() {
        switch ui.themeMode {
        case .DayMode :
            ui.themeMode = .NightMode
        case .NightMode:
            ui.themeMode = .DayMode
        }
    }
    
    // show方法
    public func show() {
        print("The app name is \(name)")
        ui.show()
    }
}





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章