JHHK

欢迎来到我的个人网站
行者常至 为者常成

9_1、方法、下标、继承(一)

目录

实例方法 类型方法

func functionExplain(){
    
    /**
     枚举、结构体、类都可以定义实例方法、类型方法
         实例方法(Instance Method):通过实例对象调用
         类型方法(Type Method):通过类型调用,用static或者class关键字定义
     
     
     self的作用
         在实例方法中代表实例对象
         在类型方法中代表类型
     */
    class Car {
        //存储类型属性 相当于全局变量
        static var count = 0
        
        //类型方法
        static func getCount()->Int{
            //此处的count 与 self.count 效果相同
            //self在类型方法中代表类型
            count
        }
        
        //存储实例属性
        var number = 0
        //实例方法
        func getNumber()->Int{
            //此处number+=1 与 self.number += 1 效果相同
            //self在实例方法中代表实例
            //self.number += 1
            number += 1
            return number
        }
        
        
        init() {
            Car.count += 1
        }
    }
    
    let c = Car()
    print(c.getNumber())//1
    print(Car.getCount())//1
}

mutating的用法

func mutatingUse() -> Void {
    
    /**
     结构体和枚举是值类型,默认情况下,值类型的属性不能被自身的实例方法修改
     在 func关键字前加 mutating 可以允许这种修改行为
     */

    do{
        print("------1---------")
        class Size{
            var width = 0
            var height = 0
            func add() -> Void {
                width += 10
                height += 10
            }
        }
        let s = Size()
        s.add()
        print(s.width,s.height)//10 10
    }
   
    
    do{
        print("------2---------")
        struct Point{
            var x = 0
            var y = 0
            mutating func moveBy(deltaX:Int,deltaY:Int) -> Void {
                x += deltaX
                y += deltaY
            }
        }
        var p = Point()
        p.moveBy(deltaX: 10, deltaY: 10)
        print(p.x,p.y)//10 10
    }
    
    
    do{
        print("------3---------")
        enum StateSwich {
            case low,middle,high
            mutating func next() -> Void {
                switch self {
                case .low:
                    self = .middle
                case .middle:
                    self = .high
                case .high:
                    self = .low
                }
            }
        }
        var st = StateSwich.low
        st.next()
        print(st)//middle
    }
   
}

discardableResult的使用

func discardableResultUse() -> Void {
    /**
     在func前面加个@discardableResult 可以消除:函数调用后返回值未被使用的警告
     */

    struct Point {
        var x = 0,y = 0
        @discardableResult mutating func moveBy(deltaX:Int) -> Int {
            x += deltaX
            return x
        }
    }
    
    var p = Point()
    p.moveBy(deltaX: 10)
}

汇总 结构体 类 枚举

func gather() -> Void {
    
    //以结构体为例(枚举少一个实例存储属性其它一致)
    struct Point{
        
        //存储实例属性 可以是let var
        let x:Int = 0
        
        //存储实例属性 带属性观察器 必须是var
         var y:Int = 0{
            willSet{
                print(newValue)
            }
            didSet{
                print(oldValue)
            }
        }
        
        //计算实例属性 必须是var
        var z:Int{
            set{
                print(newValue)
            }
            get{
                return 5
            }
        }
        
        
        
        
        
        //存储类型属性 可以是let var
        static var j:Int = 0
        
        //存储类型属性 带属性监听器必须是var 否则报错
        //'let' declarations cannot be observing properties
        static var k:Int = 0{
            willSet{
                print(newValue)
            }
            didSet{
                print(oldValue)
            }
        }
        
        //计算类型属性 必须是var
        static var z:Int{
            set{
                print(newValue)
            }
            get{
                return 10
            }
        }
        
        
        
        
        //实例方法
        func pointFunction() -> Void {
            
        }
        
        //类型方法
        public func PointFunction()->Void{
            
        }
    }
}

行者常至,为者常成!





R
Valine - A simple comment system based on Leancloud.