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