• 学习Swift--方法


    方法

    方法是与某些特定类型相关联的函数。类、结构体、枚举都可以定义实例方法;实例方法为给定类型的实例封装了具体的任务与功能。类、结构体、枚举也可以定义类型方法;类型方法与类型本身相关联。类型方法与 Objective-C 中的类方法(class methods)相似。

    实例方法

    class Counter {
        var count = 0
        
        // 实现两个简单的方法
        func increment() {
            count += 1
        }
        
        func incrementBy(amount: Int) {
            count += amount
        }
    }
    
    let counter = Counter()
    counter.increment()
    print(counter.count)
    // 打印出:1
    counter.incrementBy(5)
    print(counter.count)
    // 打印出:5
    

    self属性

    平时不需要多使用self属性,但是在某些方法的参数名与某个属性名相同,就需要用到self属性,主要作用就是用来区分属性名

    struct Point {
        var x = 0.0, y = 0.0
        func isToTheRightOfX(x: Double) -> Bool {
            // 当传进的参数(x)和已经声明的属性相吻合的时候 需要用到self属性进行区分
            return self.x > x
        }
    }
    
    let point = Point(x: 5.0, y: 3.0)
    if point.isToTheRightOfX(1.0) {
        print("The point is to the right of the line where x == 1.0")
    }
    

    实例方法修改值类型

    结构体和枚举都是值类型,那么使用实例方法对值类型的属性进行修改需要特殊处理,否则无法修改

    struct Point {
        var x = 0.0, y = 0.0
        
        // 如果要修改值类型属性 需要加 "mutating"关键字
        mutating func moveByX(deltaX: Double, deltaY:Double){
            self.x += deltaX
            self.y += deltaY
            
    //        self = Point(x: x + deltaX, y: y + deltaY)  这样写等效
        }
    }
    
    var point = Point(x: 5.0, y: 3.0)
    point.moveByX(8.0, deltaY: 2.0)
    print(point)
    
    enum StateSwitch {
        case Off, Low, High
        mutating func next() {
            switch self {
            case .Off:
                self = .Low
            case .Low:
                self = .High
            case .High:
                self = .Off
            }
        }
    }
    
    var ovenLight = StateSwitch.Off
    ovenLight.next()
    // 现在是Low状态
    ovenLight.next()
    // 现在是High状态
    

    类型方法

    实例方法是被类型的某个实例调用的方法。你也可以定义类型本身调用的方法,这种方法就叫做类型方法声明结构体和枚举的类型方法,在方法的func关键字之前加上关键字static。类可能会用关键字class来允许子类重写父类的实现方法。

    class SomeClass {
        class func someFunc() -> SomeClass {
            return SomeClass()
        }
    }
    
    // 类型方法可以直接使用类型调用,无需创建实例
    let someClass = SomeClass.someFunc()
    
    struct SomeStruct {
        static func someFunc() {
            
        }
    }
    SomeStruct.someFunc()
    
  • 相关阅读:
    H.264 RTP PAYLOAD 格式
    ARM:移动GPU往PC GPU效能迈进
    汪墩一中复校设想
    jconsole 和jvisualVM 监控远程 spring boot程序
    jenkins 登录远程机器并执行脚本,脚本中有后台执行的程序无法执行解决方法。
    linux下的抓包工具tcpdump
    adb logcat查看某个进程的输出日志
    Flask-SQLAlchemy 中多表链接查询(不使用外键)
    使用cnpm 安装vue.js
    Jmeter在非GUI环境下传递参数(命令行&Jenkins配置)
  • 原文地址:https://www.cnblogs.com/Alex-sk/p/5503359.html
Copyright © 2020-2023  润新知