美文网首页
11.方法 Methods Swift官方文档——版纳的笔记

11.方法 Methods Swift官方文档——版纳的笔记

作者: KevinFromChina | 来源:发表于2018-03-28 20:21 被阅读0次
//: Playground - noun: a place where people can play

import UIKit

// # 实例方法
// 根据闭包的捕获性质,实例方法默认可以访问同类下所有其他实例方法和属性。实例方法只能在类型的具体实例里被调用。它不能独立于实例而被调用。
// self完完全全与实例本身相等,可以在当前实例中调用实例本身
// 默认情况下,值类型(struct, enum)属性不能被自身的实例方法修改。
// 添加了mutating关键字后,方法可以修改实例中的属性,还可以赋新值给实例本身.当然如果实例本身标注了let,那就都无法修改了
struct Point {
    var x = 0.0, y = 0.0
    mutating func moveBy(x deltaX: Double, y deltaY: Double) {
        let new = Point(x: x + deltaX, y: x + deltaY)
        self = new
    }
}
// 在枚举中改变self
var somePoint = Point(x: 1, y: 1)
somePoint.moveBy(x: 1, y: 1)
enum TriStateSwitch {
    case off, low, high
    mutating func next() {
        switch self {
        case .off:
            self = .low
        case .low:
            self = .high
        case .high:
            self = .off
        }
    }
}
var ovenLight = TriStateSwitch.low
ovenLight.next()
ovenLight.next()

// # 类型方法
// func前标注static
// 可以用调用类型方法的方式来调用init
class Human {
    var isBeauty: Bool
    init(isBeauty: Bool) {
        self.isBeauty = isBeauty
    }
}
var susan = Human.init(isBeauty: true)
var lily = Human(isBeauty: false)

// 使用 class关键字来允许子类重写父类对类型方法的实现。实例方法本来就随便重写所以不用标注class
class SomeClass {
    class func someTypeMethod() {
        // type method implementation goes here
    }
    class var sw: Int {
        return 0
    }
}
SomeClass.someTypeMethod()
SomeClass.sw
// 一个类型方法可以使用方法名调用另一个类型方法,并不需要使用类型名字作为前缀。如果在其他情况,比如类型内的实例属性和方法,或类型外,都要加上类型名前缀.

相关文章

网友评论

      本文标题:11.方法 Methods Swift官方文档——版纳的笔记

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