Skip to main content

Truyền tham chiếu trong Swift

Chào mọi người, hôm nay mình muốn chia sẻ về cách truyền tham chiếu trong Swift.
Đầu tiên, mọi người cần phải phân biệt được thế nào là truyền tham chiếu và truyền tham trị trong lập trình. Nếu bạn nào đã lập trình C, C++ thì chắc không lại lẵm gì với con trỏ, đó là một loại truyền tham chiếu. Do con trỏ vô cùng phức tạp nên ở các ngôn ngữ ra đời sau này như Java, C# đã loại bỏ con trỏ để lập trình viên đỡ gặp vấn đề trong khi lập trình.
Với Swift là một ngôn ngữ bậc cao, hỗ trợ cực tốt cho lập trình viên thì việc sử dụng con trỏ là không cần thiết. Tuy nhiên nếu lập trình viên có nhu cầu hoặc với một công việc bất buộc thì Swift vẫn cho phép điều này. Để làm việc với con trỏ, Swift cung cấp từ khoá "inout".
Để mọi người hiểu hơn, mình sẽ đưa ra một ví dụ kinh điển về truyền tham chiếu đó là tráo đổi giá trị 2 số.
Như vậy cách truyền tham trị trong Swift cũng tương đối đơn giản, bạn chỉ cần thêm từ khoá inout trước kiểu dữ liệu trong khai báo hàm để trình biên dịch biết rằng bạn đang truyền tham chiếu chứ không phải tham trị. Khi gọi hàm, bạn chỉ cần thêm dấu & trước các biến. Vô cùng đơn giản phải không nào :))

Comments

Popular posts from this blog

Swift GCD part 1: Thread safe singletons

Preview Singletons are entities, referenced to the same instance of a class from everywhere in your code. It doesn't matter if you like them or not, you will definitely meet them, so it's better to understand how they work. Constructing and handling a set of data doesn't seem to be a big challenge at first glance. The problems appear when you try to optimise the user experience with background work and your app starts acting weird. ??‍♂️ After decades of watching your display mostly with a blank face, you finally realize that your data isn't handled consistently by the manager because you're accessing it (running tasks on it) from multiple threads at the same time. So you really do have to deal with making your singletons thread safe. This article series is dedicated to thread handling using Swift. In the first part below you will get a comprehensive insight into som...

RxSwift - Giới thiệu

Bạn có nghe qua về Reactive Programming chưa, đây là một khái niệm lập trình hoàn toàn mới. “Reactive Programming là lập trình theo hướng bất đồng bộ các dòng chảy dữ liệu(data streams)” Sau khi đọc khái niệm các bạn có lẽ rất mơ hồ, vậy các data streams là gì. Vậy để mình ví dụ cho các bạn: - Trong lập trình bình thường ( imperative programming ) a = b + c , tức a được gắn với kết quả cộng của b và c .Khi b với c thay đổi thì tất nhiên sẽ không ảnh hưởng tới a, nhưng trong Reactive Programming này a sẽ tự động thay đổi khi b hoặc c thay đổi, kết quả của a sẽ lập tức thay đổi theo. Vậy tại sao nên dùng RXSwift: + Giúp ứng dụng của bạn hoạt động 1 cách như là real time update ui khi có thay đổi data flow, mang đến trải nghiệm tuyệt vời cho User. + Dễ dàng lập trình bất đồng bộ (Async) thay vì phải dùng : callbacks, delegates, notifications, kvo… Bạn phải dùng nhiều thứ gây ra ứng dụng của bạn phức tạp, khó kiểm soát. + Chuyển đổi các thread khi thực hiện 1 cách...

Different between Map and FlatMap in RX

In short, the map applies a function to each emitted element and returns its result. Observable<Integer> observable = Observable . just (1,2,3) .map(x -> 10 * x); observable.subscribe(System. out ::println); Result: 10 20 30 So FlatMap applies a function to each emitted element, but this function returns the type of the Observable. I.e. 1 emitted by an element through a flatMap to generate a set of emitted elements or not one. Observable<String> observable = Observable . just ( "A" , "B" , "C" ) .flatMap(s -> { System. out .println(); return Observable. just (s + "1" , s + "2" , s + "3" ); }); observable.subscribe(s -> System. out .print(s + " " )); Result: A1 A2 A3 B1 B2 B3 C1 C2 C3