当前位置: 首页 > 文档资料 > Swift 中文教程 >

方法( Methods)

优质
小牛编辑
138浏览
2023-12-01

在Swift 4语言中,与特定类型关联的函数称为“方法”。 在Objective C中,Classes用于定义方法,而Swift 4语言为用户提供了为类,结构和枚举提供方法的灵活性。

实例方法

在Swift 4语言中,通过实例方法访问类,结构和枚举实例。

实例方法提供功能

  • 访问和修改实例属性
  • 与实例需求相关的功能

可以在{}花括号内写入实例方法。 它具有对类型实例的方法和属性的隐式访问。 当调用该类型的特定实例时,它将访问该特定实例。

语法 (Syntax)

func funcname(Parameters) -> returntype {
   Statement1
   Statement2
   ---
   Statement N
   return parameters
}

例子 (Example)

class calculations {
   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 = calculations(a: 600, b: 300)
pri.result()

当我们使用游乐场运行上述程序时,我们得到以下结果 -

Result is: 880
Result is: 850

类计算定义了两个实例方法 -

  • init()被定义为添加两个数字a和b并将其存储在结果'res'中
  • tot()用于从传递'c'值中减去'res'

最后,使用a和b的值打印计算方法。 使用'。'访问实例方法 点语法

本地和外部参数名称

Swift 4函数描述了它们变量的局部声明和全局声明。 类似地,Swift 4方法命名约定也类似于Objective C的命名约定。但是函数和方法的局部和全局参数名称声明的特征是不同的。 Swift 4中的第一个参数由介词名称引用为“with”,“for”和“by”,以便于访问命名约定。

Swift 4通过将第一个参数名称声明为本地参数名称而其余参数名称为全局参数名称,提供了方法的灵活性。 这里'no1'由Swift 4方法声明为本地参数名称。 'no2'用于全局声明并通过程序访问。

class division {
   var count: Int = 0
   func incrementBy(no1: Int, no2: Int) {
      count = no1/no2
      print(count)
   }
}
let counter = division()
counter.incrementBy(no1: 1800, no2: 3)
counter.incrementBy(no1: 1600, no2: 5)
counter.incrementBy(no1: 11000, no2: 3)

当我们使用游乐场运行上述程序时,我们得到以下结果 -

600
320
3666

带#和_符号的外部参数名称

即使Swift 4方法为本地声明提供了第一个参数名称,用户也可以修改从本地声明到全局声明的参数名称。 这可以通过在'#'符号前加上第一个参数名称来完成。 通过这样做,可以在整个模块中全局访问第一个参数。

当用户需要使用外部名称访问后续参数名称时,将使用“_”符号覆盖方法名称。

class multiplication {
   var count: Int = 0
   func incrementBy(no1: Int, no2: Int) {
      count = no1 * no2
      print(count)
   }
}
let counter = multiplication()
counter.incrementBy(no1: 800, no2: 3)
counter.incrementBy(no1: 100, no2: 5)
counter.incrementBy(no1: 15000, no2: 3)

当我们使用游乐场运行上述程序时,我们得到以下结果 -

2400
500
45000

方法中的自我属性

方法对其所有已定义的类型实例都有一个称为“self”的隐式属性。 'Self'属性用于引用其定义方法的当前实例。

class calculations {
   let a: Int
   let b: Int
   let res: Int
   init(a: Int, b: Int) {
      self.a = a
      self.b = b
      res = a + b
      print("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 = calculations(a: 600, b: 300)
let sum = calculations(a: 1200, b: 300)
pri.result()
sum.result()

当我们使用游乐场运行上述程序时,我们得到以下结果 -

Inside Self Block: 900
Inside Self Block: 1500
Result is: 880
Result is: 850
Result is: 1480
Result is: 1450

从实例方法修改值类型

在Swift 4中,语言结构和枚举属于值类型,不能通过其实例方法进行更改。 但是,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: 3)
val.scaleBy(res: 30)
val.scaleBy(res: 300)

当我们使用游乐场运行上述程序时,我们得到以下结果 -

9
15
270
450
81000
135000

变异方法的自我属性

变换方法与'self'属性相结合,为定义的方法分配一个新实例。

struct area {
   var length = 1
   var breadth = 1
   func area() -> Int {
      return length * breadth
   }
   mutating func scaleBy(res: Int) {
      self.length *= res
      self.breadth *= res
      print(length)
      print(breadth)
   }
}
var val = area(length: 3, breadth: 5)
val.scaleBy(res: 13)

当我们使用playground运行上述程序时,我们得到以下结果。 -

39
65

类型方法

当调用方法的特定实例时,它被称为Instance方法; 当方法调用特定类型的方法时,它被称为“类型方法”。 “类”的类型方法由“func”关键字定义,结构和枚举类型方法在“func”关键字之前使用“static”关键字定义。

类型方法由'。'调用和访问。 语法,而不是调用特定实例,调用整个方法。

class Math {
   class func abs(number: Int) -> Int {
      if number < 0 {
         return (-number)
      } else {
         return number
      }
   }
}
struct absno {
   static func abs(number: Int) -> Int {
      if number < 0 {
         return (-number)
      } else {
         return number
      }
   }
}
let no = Math.abs(number: -35)
let num = absno.abs(number: -5)
print(no)
print(num)

当我们使用playground运行上述程序时,我们得到以下结果。 -

35
5