swift5(11)方法

2020-02-27  本文已影响0人  C_G__

感谢作者
https://www.jianshu.com/p/40d2b3f819b7

        // 方法,用于封装业务逻辑
        // 实例方法
        // 类,枚举,结构实例的方法
        
        // self属性
        // 每个实例都有一个self的隐式属性
        
        // 实例方法中修改值类型
        // 结构和枚举是值类型。无法在其实例方法中修改属性值。
        // 使用mutating关键字修饰方法后,属性值可修改。
        var somePoint = Point2(x: 1.0, y: 1.0);
        somePoint.moveBy(x: 2.0, y: 3.0);
        print("当前点: (\(somePoint.x), \(somePoint.y))");
        //!< 当前点: (3.0, 4.0)"
        
        //使用
        let sizeType = SizeType.allCases;
        for var item in sizeType {
            print("当前的item:\(item)");
            item.nextCase();
            print("调用方法后:\(item)");
        }
        
        // 类方法
        // 类方法:使用类型本身而不是类型的实例去调用的方法
        //  static 或 class 修饰 func,class修改时,允许子类重写该方法
        // 类方法中的self指类型本身而非其实例
        
        // 函数or方法的声明属性@discardableResult
        // 表示该函数虽有返回值,但不使用编译器不生成警告。
 class func someTypeMethod() {
        //类方法的实现
    }
    @discardableResult
    func instanceMethod() -> String {
        return "返回值是一个字符串,但是调用处却不会使用,使用声明属性`@discardableResult`避免编译器的警告"
    }
struct Point2 {
    var x = 0.0, y = 0.0 //!< 必须变量,常量不能被修改
    mutating func moveBy(x deltaX: Double, y deltaY: Double) {
        self = Point2.init(x: x + deltaX, y: y + deltaY);
//        x += deltaX
//        y += deltaY
    }
}
enum SizeType:Int,CaseIterable {
    case big,middle,small
    mutating func nextCase() {
        switch self {
        case .big:
            self = .middle
        case .middle:
            self = .small
        case .small:
            self = .big
        }
    }
}

上一篇 下一篇

猜你喜欢

热点阅读