Swift: Cách sử dụng Inout
swift
68
ios
54
functional
8
Male avatar

Bùi Khánh Duy viết ngày 30/06/2018

Swift: Cách sử dụng Inout

=====
Updated ngày 30/06

Updated một chút: Vì những bất tiện và không rõ ràng về thông tin của kipalog, mình mới dọn về nhà mới ở đây, thoải mái, đẹp đẽ rõ ràng hơn kipalog. Mong các bạn có thể theo dõi tại trang web của mình để cập nhật thêm nha

Mình mới viết một loạt bài về chủ đề Clean Architecture và Service Locator. Các bạn có thể theo dõi.
Page trên facebook ở đây: ở đây

=====
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.

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

Male avatar

Bùi Khánh Duy

29 bài viết.
11 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
Male avatar
4 0
Autolayout và lifecycle trong IOS ===== Updated ngày 30/06 Updated một chút: Vì những bất tiện và không rõ ràng về thông tin của kipalog, mình mớ...
Bùi Khánh Duy viết 4 tháng trước
4 0
Male avatar
3 3
RxSwift: Bài 1 Observable và Just, Of, From ===== Updated ngày 30/06 Updated một chút: Vì những bất tiện và không rõ ràng về thông tin của kipalo...
Bùi Khánh Duy viết 6 tháng trước
3 3
Male avatar
2 3
RxSwift: Bài 2 Subscribing to observables ===== Updated ngày 30/06 Updated một chút: Vì những bất tiện và không rõ ràng về thông tin của kipalog,...
Bùi Khánh Duy viết 6 tháng trước
2 3
Bài viết liên quan
White
13 6
Người ta nói "nullable values" là cái "billion dollar mistake". Kể từ ALGOL, chúng ta không thể dùng nullable values/references như một value bình ...
Justin Le viết 3 năm trước
13 6
White
2 3
Xin chào mọi người. Mình xin chia sẽ một UILabel Helper nhỏ dùng trong truờng hợp cần tính chiều cao của UILabel để xác định "Show More" button có ...
DonDinh viết hơn 3 năm trước
2 3
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


Male avatar
{{userFollowed ? 'Following' : 'Follow'}}
29 bài viết.
11 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!