Swift - Phương thức

Trong ngôn ngữ Swift 4, các hàm được liên kết với các kiểu cụ thể được gọi là Phương thức. Trong Objective C, các lớp được sử dụng để định nghĩa các phương thức, trong khi ngôn ngữ Swift 4 cung cấp cho người dùng sự linh hoạt để có các phương thức cho Lớp, Cấu trúc và Danh sách.

Phương pháp phiên bản

Trong ngôn ngữ Swift 4, các cá thể Lớp, Cấu trúc và Liệt kê được truy cập thông qua các phương thức cá thể.

Phương thức phiên bản cung cấp chức năng

  • Để truy cập và sửa đổi thuộc tính phiên bản
  • chức năng liên quan đến nhu cầu của phiên bản

Phương thức thể hiện có thể được viết bên trong dấu ngoặc nhọn {}. Nó có quyền truy cập ngầm vào các phương thức và thuộc tính của thể hiện kiểu. Khi một thể hiện cụ thể của kiểu được gọi, nó sẽ có quyền truy cập vào thể hiện cụ thể đó.

Cú pháp

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

Thí dụ

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

Khi chúng tôi chạy chương trình trên bằng sân chơi, chúng tôi nhận được kết quả sau:

Result is: 880
Result is: 850

Tính toán lớp xác định hai phương thức thể hiện:

  • init () được định nghĩa để thêm hai số a và b và lưu trữ nó trong kết quả 'res'
  • tot () được dùng để trừ giá trị 'res' chuyển sang giá trị 'c'

Cuối cùng, để in ra các phương thức tính toán với các giá trị cho a và b được gọi. Các phương thức phiên bản được truy cập bằng '.' cú pháp dấu chấm

Tên tham số cục bộ và bên ngoài

Các hàm Swift 4 mô tả cả khai báo cục bộ và toàn cục cho các biến của chúng. Tương tự, các quy ước đặt tên của Swift 4 Method cũng giống như của Objective C. Nhưng đặc điểm của khai báo tên tham số cục bộ và toàn cục là khác nhau đối với các hàm và phương thức. Tham số đầu tiên trong Swift 4 được gọi bằng các tên giới từ như 'with', 'for' và 'by' để dễ dàng truy cập các quy ước đặt tên.

Swift 4 cung cấp sự linh hoạt trong các phương thức bằng cách khai báo tên tham số đầu tiên là tên tham số cục bộ và các tên tham số còn lại là tên tham số toàn cục. Ở đây 'no1' được khai báo bởi các phương thức Swift 4 dưới dạng tên tham số cục bộ. 'no2' được sử dụng cho các khai báo toàn cục và được truy cập thông qua chương trình.

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)

Khi chúng tôi chạy chương trình trên bằng sân chơi, chúng tôi nhận được kết quả sau:

600
320
3666

Tên thông số bên ngoài với ký hiệu # và _

Mặc dù các phương thức Swift 4 cung cấp tên tham số đầu tiên cho các khai báo cục bộ, người dùng có điều kiện sửa đổi tên tham số từ khai báo cục bộ thành toàn cục. Điều này có thể được thực hiện bằng cách thêm tiền tố '#' với tên tham số đầu tiên. Bằng cách đó, tham số đầu tiên có thể được truy cập trên toàn cầu trong suốt các mô-đun.

Khi người dùng cần truy cập các tên tham số tiếp theo với tên bên ngoài, tên phương thức sẽ được ghi đè với sự trợ giúp của ký hiệu '_'.

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)

Khi chúng tôi chạy chương trình trên bằng sân chơi, chúng tôi nhận được kết quả sau:

2400
500
45000

Thuộc tính bản thân trong các phương thức

Các phương thức có một thuộc tính ngầm được gọi là 'self' cho tất cả các trường hợp kiểu được xác định của nó. Thuộc tính 'self' được sử dụng để tham chiếu các trường hợp hiện tại cho các phương thức được xác định của nó.

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

Khi chúng tôi chạy chương trình trên bằng sân chơi, chúng tôi nhận được kết quả sau:

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

Sửa đổi các loại giá trị từ các phương thức phiên bản

Trong ngôn ngữ Swift 4, cấu trúc và bảng liệt kê thuộc về các kiểu giá trị không thể thay đổi bằng các phương thức thể hiện của nó. Tuy nhiên, ngôn ngữ Swift 4 cung cấp sự linh hoạt để sửa đổi các loại giá trị bằng hành vi 'thay đổi'. Mutate sẽ thực hiện bất kỳ thay đổi nào trong các phương thức thể hiện và sẽ trở lại dạng ban đầu sau khi thực thi phương thức. Ngoài ra, bởi thuộc tính 'self', trường hợp mới được tạo cho hàm ngầm định của nó và sẽ thay thế phương thức hiện có sau khi thực thi

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)

Khi chúng tôi chạy chương trình trên bằng sân chơi, chúng tôi nhận được kết quả sau:

9
15
270
450
81000
135000

Tài sản tự có cho phương pháp đột biến

Các phương thức thay đổi kết hợp với thuộc tính 'self' sẽ gán một phiên bản mới cho phương thức đã xác định.

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)

Khi chúng tôi chạy chương trình trên bằng cách sử dụng sân chơi, chúng tôi nhận được kết quả sau. -

39
65

Loại phương pháp

Khi một thể hiện cụ thể của một phương thức được gọi, nó được gọi là một phương thức Instance; và khi phương thức gọi một kiểu cụ thể của một phương thức, nó được gọi là 'Phương thức kiểu'. Phương thức loại cho 'lớp' được xác định bởi từ khóa 'func' và các cấu trúc và phương thức kiểu liệt kê được xác định với từ khóa 'tĩnh' trước từ khóa 'func'.

Các phương thức kiểu được gọi và truy cập bởi '.' cú pháp trong đó thay vì gọi một trường hợp cụ thể, toàn bộ phương thức được gọi.

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)

Khi chúng tôi chạy chương trình trên bằng cách sử dụng sân chơi, chúng tôi nhận được kết quả sau. -

35
5