12.方法

作者: LucXion | 来源:发表于2021-07-19 10:48 被阅读0次

方法是与某些特定类型相关联的函数。

self 属性

类型的每一个实例都有一个隐含属性叫做 selfself 完全等同于该实例本身。你可以在一个实例的实例方法中使用这个隐含的 self 属性来引用当前实例。

必须写 self 的场景

  1. 消除歧义:方法参数名称与属性同名
  2. 值类型实例方法内改变 self

实例方法中修改值类型(结构体、枚举)

结构体和枚举是值类型。默认情况下,值类型的属性不能在它的实例方法中被修改。

但是,如果你确实需要在某个特定的方法中修改结构体或者枚举的属性,你可以为这个方法选择 可变(mutating)行为,然后就可以从其方法内部改变它的属性;并且这个方法做的任何改变都会在方法执行结束时写回到原始结构中。方法还可以给它隐含的 self 属性赋予一个全新的实例,这个新实例在方法结束时会替换现存实例。

要使用 可变方法,将关键字 mutating 放到方法的 func 关键字之前就可以了:

enum Lamp:Int {
    case off,on
    mutating func next() {
        switch self {
        case .off:
            self = .on 
        case .on:
            self = .off 
        }
    }
}
var lamp = Lamp.off
lamp.next()
print(lamp)

类方法

实例方法是被某个类型的实例调用的方法。你也可以定义在类型本身上调用的方法,这种方法就叫做类型方法。在方法的 func 关键字之前加上关键字 static,来指定类型方法。类还可以用关键字 class 来指定,从而允许子类重写父类该方法的实现。

在类型方法的方法体(body)中,self 属性指向这个类型本身,而不是类型的某个实例。这意味着你可以用 self 来消除类型属性和类型方法参数之间的歧义(类似于我们在前面处理实例属性和实例方法参数时做的那样)。

struct Game {
    static var hightLv = 1 // 当前游戏最高等级
    var currentLv = 1 //当前用户等级,支持多用户
    // 修改解锁等级
    static func changeHightLv(lv:Int) {
        hightLv = (lv>hightLv) ? lv : hightLv // 类方法中调用类属性,不需要加self
    }
    // 当前等级是否已解锁
    func checkHightLv()->Bool {
        return currentLv <= Game.hightLv // 实例方法中调用类方法需要加类名
    }
    // 是否能进入下个等级
    @discardableResult // 不接收返回值不会报警告
    func advans()->Bool {
        return currentLv + 1 <= Game.hightLv
    }
}

相关文章

  • 12.方法

    方法是与某些特定类型相关联的函数。 self 属性 类型的每一个实例都有一个隐含属性叫做 self,self 完全...

  • Python OOP-5

    12. 所用软件 画图软件:Faststone capture 13. 抽象类 抽象方法:没有具体实现内容的方法称...

  • 12.虚方法

    非虚方法 如果方法在编译器就确定了具体的调用版本,这个版本在运行时是不可变的。这样的方法称为非虚方法 静态方法、私...

  • Kotlin学习笔记之 12 对象表达式和对象声明

    12.对象表达式和对象声明 方法返回匿名对象我们也可以直接将object关键字修饰的匿名类赋值给方法,表明这个方法...

  • 12.方法调配技术

    1.在运行时,可以向类中新增或替换选择子所对应的方法实现。2.使用另一份实现替换原来的方法实现:“方法调配”

  • 屏蔽Xcode8控制台打印的多余代码

    解决方法如下: 1.打开Xcode,如下图进行操作操作12.添加 key:OS_ACTIVITY_MODE ...

  • swift tips - 11~15

    11. 在XCUIApplication的扩展中构建UI测试 12. 使用.语法调用初始化方法,并且传递必包参数 ...

  • 开发十年,留下最完整的Java架构学习路线,学完年薪65W

    10. 解决临界资源问题之同步方法 11. 解决临界资源问题之ReentrantLock 12. 多线程讲解和理解...

  • 《人性的弱点》鼓励他人作出改变--21(52)

    第三篇 十二种方法,赢得他人的赞同 12.鼓励他人作出改变 卡耐基名言 1.激发竞争,是做事成功的方法,不是钩心斗...

  • 12. 带最小值操作的栈

    12. 带最小值操作的栈 描述 笔记 数据 评测 实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最...

网友评论

      本文标题:12.方法

      本文链接:https://www.haomeiwen.com/subject/yjmppltx.html