Swift 方法
在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
在上面的示例中,class 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属性
方法对于其定义的所有类型实例都有一个隐含的属性称为 ‘self’。Self属性或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中,结构体和枚举属于值类型,不能通过其实例方法进行修改,但是我们可以通过’mutating’行为来修改值类型。使用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