本文概述
在Swift4中, 方法是与特定类型关联的函数。在Objective-C中, 类用于定义方法, 而在Swift4中, 我们具有用于类, 结构和枚举的方法。
实例方法
实例方法是与类, 结构或枚举的实例相关联的方法。实例方法写在该类型的主体内。
实例方法提供了与实例需求相关的功能, 还提供了访问和修改实例属性的功能。实例方法写在大括号{}中。它具有对类型实例的方法和属性的隐式访问。当调用该类型的特定实例时, 它将可以访问该特定实例。
句法:
func funcname(Parameters) -> returntype {
Statement1
Statement2
---
Statement N
return parameters
}
例:
class calculate {
let a: Int
let b: Int
let res: Int
init(a: Int, b: Int) {
self.a = a
self.b = b
res = a + b
}
func tot(c: Int) -> Int {
return res - c
}
func result() {
print("Result is: \(tot(c: 20))")
print("Result is: \(tot(c: 50))")
}
}
let pri = calculate(a: 200, b: 300)
pri.result()
输出
Result is: 480
Result is: 450
在上面的示例中, 类calculate定义了两个实例方法:
- init()定义为将两个数字a和b相加并将其存储在结果’res’中。
- tot()用于从传递的’c’值中减去’res’。
本地和外部参数名称
在Swift4中, 函数可以描述其变量的局部和全局声明。函数和方法的局部和全局参数名称声明的特征是不同的。 Swift 4中的第一个参数由名为” with”, ” for”和” by”的介词引用, 以便于访问命名约定。
在Swift 4中, 你可以将第一个参数名称声明为本地参数, 将其余参数名称声明为全局参数名称。
让我们来看一个例子。在这里, ” no1″被声明为局部参数名称, ” no2″被用于全局声明, 并且可以在整个程序中进行访问。
例子
class divide {
var count: Int = 0
func incrementBy(no1: Int, no2: Int) {
count = no1 / no2
print(count)
}
}
let counter = divide()
counter.incrementBy(no1: 100, no2: 3)
counter.incrementBy(no1: 200, no2: 5)
counter.incrementBy(no1: 400, no2: 7)
输出
33
40
57
方法中的自属性
方法的所有定义类型实例都有一个称为” self”的隐式属性。 “自我”属性或”自我”方法提供了用于访问实例本身的方法。
例子
class calculate {
let a: Int
let b: Int
let res: Int
init(a: Int, b: Int) {
self.a = a
self.b = b
res = a + b
print("Result Inside Self Block: \(res)")
}
func tot(c: Int) -> Int {
return res - c
}
func result() {
print("Result is: \(tot(c: 20))")
print("Result is: \(tot(c: 50))")
}
}
let pri = calculate(a: 100, b: 200)
let sum = calculate(a: 300, b: 400)
pri.result()
sum.result()
输出
Result Inside Self Block: 300
Result Inside Self Block: 700
Result is: 280
Result is: 250
Result is: 680
Result is: 650
通过实例方法修改值类型
在Swift 4中, 结构和枚举属于值类型, 不能通过其实例方法更改, 但我们可以通过”变异”行为来修改值类型。 Mutate将对实例方法进行任何更改, 并在执行该方法后返回到原始形式。同样, 通过’self’属性, 将为其隐式函数创建新实例, 并在执行后替换现有方法。
例子
struct area {
var length = 1
var breadth = 1
func area() -> Int {
return length * breadth
}
mutating func scaleBy(res: Int) {
length *= res
breadth *= res
print(length)
print(breadth)
}
}
var val = area(length: 3, breadth: 5)
val.scaleBy(res: 2)
val.scaleBy(res: 20)
val.scaleBy(res: 200)
输出
6
10
120
200
24000
40000