Swift方法

在Swift 4語言中,與特定類型關聯的函數稱為“方法”。 在Objective C中,類用於定義方法,而Swift 4語言為用戶提供了為類,結構體和枚舉也提供方法,提高了靈活性。

實例方法

在Swift 4語言中,通過實例方法訪問類,結構體和枚舉實例。

實例方法提供功能 -

  • 訪問和修改實例屬性
  • 與實例需求相關的功能

可以在{}花括弧內寫入實例方法。 它具有對類型實例的方法和屬性的隱式訪問。 當調用該類型的特定實例時,它將訪問特定實例。

語法

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

示例代碼

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()

當使用playground 運行上述程式時,得到以下結果 -

Result is: 880
Result is: 850

Calculations類定義了兩個實例方法 -

  • init()方法定義為添加兩個數字ab並將其存儲在結果res
  • tot()方法用於從傳遞c值中減去res

最後,使用ab的值列印calculations方法。 使用點語法.訪問實例方法。

局部和外部參數名稱

Swift 4函數描述了它們變數的局部聲明和全局聲明。 類似地,Swift 4方法命名約定也類似於Objective C的命名約定。但是函數和方法的局部和全局參數名稱聲明的特徵是不同的。 Swift 4中的第一個參數由介詞名稱引用為:withforby,以便於訪問命名約定。

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)

當使用playground 運行上述程式時,得到以下結果 -

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)

當使用playground 運行上述程式時,得到以下結果 -

2400
500
45000

self屬性

方法對所有已定義的類型實例都有一個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()

當使用playground 運行上述程式時,得到以下結果 -

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

從實例方法修改值類型

在Swift 4中,語言結構和枚舉屬於值類型,不能通過其實例方法進行更改。 但是,Swift 4語言提供了通過“變異”行為修改值類型。 mutating將在實例方法中進行任何更改,並在執行方法後返回到原始形式。 此外,通過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)

當使用playground 運行上述程式時,得到以下結果 -

9
15
270
450
81000
135000

變異方法的self屬性

變異方法與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

類型方法

當調用方法的特定實例時,它被稱為實例方法; 當方法調用特定類型的方法時,它被稱為“類型方法”。 “類”的類型方法由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

上一篇: Swift屬性 下一篇: Swift下標