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()
    }
}





猜你喜欢

转载自blog.csdn.net/clarence20170301/article/details/59108959
今日推荐