07/09/2018, 17:26

Swift: Cách sử dụng Inout

Swift: Cách sử dụng Inout 1.Mở đầu Như các bạn đã biết về cách sử dụng return function, ví dụ: cho 2 tham số, trả về tổng của chúng. Thông thường, mình không muốn 1 hàm thay đổi các tham số của nó, bởi vì nếu làm vậy, bạn có thể không nắm chắc được giá trị của parameters và sẽ làm sai lệch ...

Swift: Cách sử dụng Inout

1.Mở đầu
Như các bạn đã biết về cách sử dụng return function, ví dụ: cho 2 tham số, trả về tổng của chúng.
Thông thường, mình không muốn 1 hàm thay đổi các tham số của nó, bởi vì nếu làm vậy, bạn có thể không nắm chắc được giá trị của parameters và sẽ làm sai lệch các logic code của bạn trong hàm, dẫn đến data output bị sai.

Tuy nhiên, đôi khi bạn cũng muốn 1 function thay đổi các parameter trực tiếp, đó là phần Inout (hay copy-in copy-out).

2.Cách dùng
Các bạn code như sau:

func incrementAndPrint(_ value: inout Int) {
  value += 1
  print(value)
}

func code như bình thường nhưng thêm Inout trước phần mà các bạn khai báo Type. Và khi gọi ra thì nó cũng có 1 chút khác biệt khi truyền vào argument:

var value = 5
incrementAndPrint(&value)
print(value)

Yeah, đó là thêm & trước arguments, cái này sẽ làm rõ việc gọi lúc đó là các bạn đang dùng copy-in copy-outout. Kết quả là 6 như expected.

Sử dụng Inout sẽ giữ lại giá trị đã thay đổi sau khi func kết thúc. Trong nhiều điều kiện nhất định, compliler có thể đơn giản hoá việc sao chép này thông qua tham chiếu (pass-by-reference).

Argument sẽ không được copied vào parameter. Thay vào đó, parameter sẽ chỉ giữ tham chiếu đến ô nhớ của giá trị gốc. Việc tối ưu hoá này sẽ đáp ứng những yêu cầu của việc sao chép trong khi việc xoá bỏ giá trị cũ cần phải tạo những bản sao.

Để thấy thêm những ví dụ cụ thể khác, và những tình huống áp dụng khác. Các bạn xem thêm ở đây.

0