Swift-OOP-权限控制

2020-11-26  本文已影响0人  守护地中海的花

访问控制(Access Control)

访问级别的使用准则

元组类型

internal struct Dog {
    
}
fileprivate class Person {
    
}
fileprivate var data1:(Dog,Person)

泛型类型

internal class Car {}
fileprivate class Doga {}
public class Persona <T1,T2>{}
//Persona<Car,Doga> 的访问级别是fileprivate
fileprivate var p = Persona<Car,Doga>()

成员、嵌套类型

public class PublicClass {
    public var p1 = 0//public
    var p2 = 0//internal
    fileprivate func f1() {}//fileprivate
    private func f2 () {} //private
}
class internalClass {//internal
    var p = 0 //internal
    fileprivate func fn1 () {}//fileprivate
}
fileprivate class FilePrivateClass {//fileprivate
    func f1()  {
        
    } //fileprivate
}
private class PrivateClass {//private
    func f() {}//private
}

成员的重写

public class Personb {
    var age = 0
    private var height = 1.88
}
class Studentb: Personb {
    override var age: Int {
        set {}
        get {20}
    }
    /**
     //报错
     override var height: Double {
         set {}
         get {20.0}
     }
     */
}
/**
 * 子类重写成员的访问级别必须 >= 子类的访问级别,或者 >= 父类被重写成员的访问级别
 * 父类的成员不能被成员作用域外定义的子类重写
 */
public class Personc {
    private var height = 1.88
    class Studentb: Personc {
        override var height: Double {
            set {}
            get {20.0}
        }
    }
}

getter、setter

fileprivate(set) public var num = 0

class Persond {
    private(set) var age = 0
    fileprivate(set) public var weight: Int {
        set {}
        get {10}
    }
}

初始化器

枚举类型的case

协议

public protocol runablex {
     func run()
    
}

public class Persone: runablex {
    /**
     //Method 'run()' must be declared public because it matches a requirement in public protocol 'runablex'
     //方法“run()”必须声明为public,因为它符合公共协议“runablex”中的要求
     func run() {
         print("run")
     }
     */
    public func run() {
        
    }
}

扩展

public class Personf {
    private func run0 () {
        run1()
        run2()
        eat2()
    }
    private func eat0 () {
        
    }
}
extension Personf {
    private func run1 () {
        
    }
    private func eat1 () {
        
    }
}
extension Personf {
    private func run2 () {
        
    }
    private func eat2 () {
        
    }
}
上一篇 下一篇

猜你喜欢

热点阅读