Swift中的方法、继承

2022-08-10  本文已影响0人  Sweet丶

上几篇 Swift中的属性熟练使用Swift中的区间Swift枚举

一、方法
Swift方法.png
/* 类中的方法
   1.实例方法调用:从实例前8字节找到类型信息 -》从类型信息中找到方法地址调用 -》类型信息通过汇编查看地址发现位于全局区。
   2.subscrip类似实例方法、计算属性,本质是方法.
   3.static\class修饰的方法是类型方法,使用类型调用;也能修饰subscript方法
   4.重写的方法使用override修饰
 */
class ZLFunction {
    var grade1: ScoreGrade?
    var grade2: ScoreGrade?
    // 1.实例方法,子类可以重写
    func isPass() -> Bool { return true }
    
    // static修饰的类型方法子类不能重写
    static func staticFunc() {}
    
    // class修饰的类型方法子类可以重写
    class func classFunc() {}
    
    // 下标方法:(static\class也可以用来修饰subscript方法,调用时使用类型调用)
    // 1.实例通过中括号进行赋值、取值。可以只有get方法
    subscript (index: Int) -> String {
        set {
            if index == 0 {
                grade1 = (newValue == "A") ? .A : .E
            } else {
                grade2 = (newValue == "A") ? .A : .E
            }
        }
        
        get {
            if index == 0 {
                 return (grade1 == .A) ? "A" : "E"
            } else {
                return (grade2 == .A) ? "A" : "E"
            }
        }
    }
        
    // 2.下标方法可以有多个参数,调用时如:instance[param1, param2]
    subscript (index: Int, index2: Int) -> String {
        //...
    }
    
    // 3.下标方法可以设置标签,调用时如:instance[label:param1, param2]
    subscript (label index: Int, index2: Int) -> String {
        //...
    }
}

/* 值类型中的方法(枚举、结构体)
   1.枚举、结构体中方法如果修改自身需要用`mutating`修饰
   2.值类型的类型方法用static修饰
   3.值类型的方法调用时,是直接调用方法地址
 */
enum ScoreGrade: Int {
    case A, B, C, D, E
    
    // 1.值类型中的方法如果要修改自身内存,方法需要加mutating修饰
    mutating func modifyToLevel() {
        self = ScoreGrade.A
    }
    // 2.类型方法,通过类型调用
    static func test() { }
    // 3.枚举中的类型下标方法(加了static是类型下标,用类型调用)
    /*static*/ subscript (index: Int, index2: Int) -> String {
        set {}
        get {
            return "ScoreGrade"
        }
    }
}
二、类的继承
Swift类的继承.png
上一篇 下一篇

猜你喜欢

热点阅读