• 十、方法 Methods


    1. 概述

    方法 Methods 与函数类似,它是与某种类型(比如类、结构体、枚举)关联起来的函数 Function。关于Function,参考第五章函数

    2. 方法的内部和外部参数名

    Methods 的内部和外部参数名与 Function 类似,但是略有不同。

    在Swift中,编译器默认会给 Methods 的第一个参数一个内部参数名 local parameter name,第二个后之后的参数给予内部和外部参数名 local and external parameter names。

        class Counter {
            var count: Int = 0
            func incrementBy(amount: Int, numberOfTimes: Int) {
                count += amount * numberOfTimes
            }
        }

    可以在第二个参数前加上 (#),是这种规则明确生效。——实际上是速记外部参数名。

        func incrementBy(amount: Int, #numberOfTimes: Int) {
          count += amount * numberOfTimes
        }

    你也可以在第一个参数前加上(#),为第一个参数添加一个外部参数名。

    有时你会希望覆盖掉上面编译器默认的命名行为,通过下划线(_),明确的表名参数名为外部参数名。

    3. 在实例的方法中更改值类型 Modifying Value Types from Within Instance Methods

    Structures 和 enumerations 是 Value Types 。默认情况下,值类型的实例不能更改值类型的属性 (原话是:the properties of a value type cannot be modified from within its instance methods.)。

    如果你想通过某个方法更改结构体或枚举的属性,可以在方法前加上 mutating 关键字,表明可以在这个方法中改变(mutate or change)它的属性,这个方法所做的任何改变将会在它结束时,写回原来的结构体;这个方法甚至可以给它的 self 属性赋值,那么当这个方法结束时,新的实例将覆盖掉原来的实例。

        struct Point {
          var x = 0.0, y = 0.0
          mutating func moveByX(deltaX: Double, y deltaY: Double) {
            x += deltaX
            y += deltaY
          }
        }
        var somePoint = Point(x: 1.0, y: 1.0)
        somePoint.moveByX(2.0, y: 3.0)
        println("The point is now at ((somePoint.x), (somePoint.y))")
        // prints "The point is now at (3.0, 4.0)"

    注意:你不能在 constant 型结构体中定义mutating 方法,因为即使它的属性为 variable 类型,也无法被改变。

        let fixedPoint = Point(x: 3.0, y: 3.0)
        fixedPoint.moveByX(2.0, y: 3.0)
        // this will report an error

    4. 在 Mutating 方法中给 self 赋值 Assigning to self Within a Mutating Method

    4.1 Mutating 在结构体中使用

        struct Point {
          var x = 0.0, y = 0.0
          mutating func moveByX(deltaX: Double, y deltaY: Double) {
            self = Point(x: x + deltaX, y: y + deltaY)
          }
        }

    上面版本中,调用实例的 moveByX 方法时,新的实例将覆盖掉原来的实例。

    4.2 Mutating 在枚举中的使用

     完成枚举一节后再继续本节内容。。。

  • 相关阅读:
    牢骚
    【题解】LFYZNoip前水题赛 T6
    【模板】 ST表
    【模板】高精度。。。。。
    【模板】堆优化 + dij +pair 存储
    【模板】树状数组
    近两天目标
    当堆遇到STL 代码焕发光芒
    【模板】并查集
    【NOI2000】 单词查找树
  • 原文地址:https://www.cnblogs.com/actionke/p/4228952.html
Copyright © 2020-2023  润新知