Swift方法Methods

方法是与特定类型关联的函数。在类、结构体和枚举中都可以定义方法方法可以是实例方法,也可以是类型方法

实例方法

实例方法是属于某一特定类、结构体或枚举的函数。它们提供访问和修改实例属性方法,或者提供与实例相关的功能。实例方法函数功能相同,具有完全相同的语法。

在实例方法的大括号内,可以访问局部变量和全局变量。实例方法同样也可以调用其他实例方法

局部变量和全局变量

class Counter {
    var count: Int = 0
    func incrementBy(amount: Int,numberOfTimes: Int) {
        count += amount * numberOfTimes
    }
}
let counter = Counter()
counter.incrementBy(5,numberOfTimes: 3)
print("\(counter.count)") // 15

如上所示:类Counter中有一个变量count,和一个实例方法incrementBy。在incrementBy方法内可以访问全局变量count。

修改外部参数名称

如上面的例子,在外部调用方法时使用incrementBy(5,numberOfTimes: 3),如果你觉得这样太麻烦,我们还可以省略numberOfTimes这个名称,只需参数名前加下划线。即修改方法体为func incrementBy(amount: Int,_ numberOfTimes: Int),此时的外部访问变为counter.incrementBy(5,3)

Self属性

在Swift中也可以使用self访问全局属性或全局方法

struct Point {
    var x = 0.0,y = 0.0
    func isToTheRightOfX(x: Double) -> Bool {
        // 这里有内部和外部属性
        return self.x > x
    }
}
let somePoint = Point(x: 4.0,y: 5.0)
print("\(somePoint.isToTheRightOfX(1.0))") // true

在实例方法修改值类型

在swift中,不但可以给类添加方法,还可以在结构体和枚举中添加方法

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)
print("(\(somePoint.x),\(somePoint.y))") // (3.0,4.0)
let fixedPoint = Point(x: 3.0,y: 3.0)
// 结构体是值对象,使用let常量后,无法修改内部值
fixedPoint.moveByX(2.0,y: 3.0) // 抛错

由于结构体和枚举是值类型,认情况下,实例方法中是不可以修改值类型的属性。我们只可以在外部修改值类型中的属性。如果你想在实例中修改值类型的属性,只需在方法名前加mutating关键字。

在实例方法修改结构体或枚举

在结构体和枚举内,self代表当前结构体或枚举,我们还可以通过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)
    }
}

// 枚举测试
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
print("\(ovenLight.next())") // High
print("\(ovenLight.next())") // Off

如上所示,在实例方法中就可修改self。

类型方法

方法中我们可以不初始化类就调用类的内部方法,这就是类型方法

class SomeClass {
    class func someTypeMethod() {
        // type method implementation goes here
    }
}

SomeClass.someTypeMethod()

如上,我们只需在方法名前添加class关键字,就可直接使用类名加方法调用someTypeMethod方法

接下来为大家演示怎么直接使用结构体名加方法名。使用到的关键字为static

// 结构体
struct LevelTracker {
    // static修改属性方法体要修改static属性方法前要使用static
    static var highestUnlockedLevel = 1
    static func levelIsUnlocked(level: Int) -> Bool {
        return level <= highestUnlockedLevel
    }
}

print("\(LevelTracker.levelIsUnlocked(2))") // false

其他

参考资料

The Swift Programming Language (Swift 2.1)

文档修改记录

时间 描述
2015-10-30 根据 The Swift Programming Language (Swift 2.1)中的中的Methods总结

版权所有:http://blog.csdn.net/y550918116j

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...