COMBINE ĐI VỚI GIỚI TỪ GÌ

      705

Combine được ra mắt vài WWDC 2019, là một trong framework "reactive" của thiết yếu Apple. Quý khách hàng hoàn toàn có thể cần sử dụng nó để Việc code của mình dễ dàng và đơn giản hơn khi sử dụng các sản phẩm như: delegate, notification, timer, bloông chồng completion, callback...

Bạn đang xem: Combine đi với giới từ gì

Trong gợi ý này sẽ bao gồm:

Cách dùng Pulisher với Subcriber.Handler sự kiện streams.Dùng Timer theo cách của Combinelúc nào phải cần sử dụng Combine vào project của bạn.

Quý khách hàng sẽ được giới thiệu về các knhì niệm chủ yếu về nó qua game FindOrLose - một game tìm kiếm image khác biệt đối với 3 image không giống.

Getting Started

Download

Tải về và test build project.

Trước Lúc chúng ta có thể chơi trò giải trí, bạn cần register trên Unsplash Developers Portal nhằm API key.Sau Khi ĐK, bạn sẽ đề xuất tạo nên một vận dụng. Sau Khi hoàn thành, các bạn sẽ thấy một màn hình hiển thị như thế này:

*

Open UnsplashAPI.swift cùng thêm Unsplash API key vào UnsplashAPI.accessToken, hình dạng như thế này:

enum UnsplashAPI static let accessToken = "" ...Build và Run. Màn hình thiết yếu hiển thị cho mình tư hình vuông màu xám. quý khách cũng biến thành thấy một button để play hoặc pause trò chơi:

*

Tap Play to start the game:

*

Ngay bây giờ, đấy là game vận động không hề thiếu, nhưng lại hãy coi playtrò chơi () vào GameViewControll.swift. Method ngơi nghỉ cuối như thế này:

} } } } } }Đó là quá nhiều "}" lồng nhau. Bạn hoàn toàn có thể tìm thấy những gì xảy ra, với theo đồ vật tự nào? Điều gì đang xảy ra nếu bạn muốn biến đổi vật dụng từ xẩy ra, hoặc bảo hộ hoặc thêm tính năng mới? Đã tới thời điểm nhằm cảm nhận sự giúp sức từ Combine! =)).

Introduction khổng lồ Combine

Framework Combine cung ứng API khai báo nhằm cách xử lý các cực hiếm theo thời gian. Có bố nguyên tố chính:

Publishers: Những sản phẩm gì đó mà bắn ra value.

Operators: Những thứ gì này mà thao tác cùng với các value.

Subscribers: Những trang bị gì đó mà mang value để làm nào đấy.

Lần lượt rước từng thành phần:

Publishers

Các Object cân xứng cùng với Publisher cung ứng một chuỗi những value theo thời hạn. Giao thức gồm nhị loại liên quan: Output đầu ra - một số loại cực hiếm mà nó tạo nên với Failure - loại error nhưng nó có thể chạm chán nên.

Mỗi publisher có thể emit các sự kiện:

Một quý giá đầu ra của các loại Output.

Một dấu hiệu cho biết đang xong xuôi luồng.

Một lỗi Failure.

Một số một số loại Foundation đã có được cải tiến nhằm thể hiện chức năng của bọn chúng thông qua các publisher, bao hàm Timer cùng URLSession, mà bạn sẽ sử dụng vào trả lời này.

Operators

Operator là những method đặc trưng được Hotline trên những publisher và trả về thuộc hoặc một publisher không giống. Một operator biểu thị một hành vi để chuyển đổi value, thêm value, vứt bỏ value hoặc nhiều hoạt động khác. Quý khách hàng có thể xâu chuỗi nhiều toán thù tử lại với nhau nhằm thực hiện cách xử lý phức hợp.

Hãy nghĩ về các quý giá nhận ra trường đoản cú publisher gốc thông sang một loạt những tân oán tử. Giống như một loại sông, các cực hiếm tới từ publisher này với đi đến publisher không giống.

Subscribers

Các quảng cáo trên internet và operator là vô nghĩa trừ Lúc có nào đó vẫn "lắng nghe" các sự kiện được công bố. Đó là một cái gì đấy là Subscriber.

Subscriber là một trong giao thức khác. Giống nlỗi quảng cáo trên internet, nó bao gồm nhì nhiều loại liên kết: Input với Failure. Chúng cần tương xứng cùng với Output cùng Failure của publisher.

Xem thêm: Cách Tính Tổng Theo Hàng Ngang Trong Excel Cơ Bản, Cách Tính Tổng, Sum Theo Hàng Ngang Trong Excel

Subscriber cảm nhận một luồng giá trị, sự khiếu nại completion hoặc sự kiện failure từ bỏ publisher.

Putting it together

Publisher bước đầu phạt những value khi chúng ta Điện thoại tư vấn subscribe( : ) trên kia, chuyển hẳn sang subscriber của công ty. Tại thời đặc điểm này, publisher gửi một subscription mang đến subscriber. Sau đó, subscriber hoàn toàn có thể áp dụng subscription này để mang ra yên cầu trường đoản cú publisher về con số quý giá xác định hoặc ko xác minh.

Sau đó, publisher hoàn toàn có thể thoải mái gửi các value đến Subscriber. Nó rất có thể gửi không thiếu con số value được từng trải, cơ mà nó cũng rất có thể gửi ít hơn. Nếu publisher là hữu hạn thì cuối cùng nó sẽ trả về event completion hoặc hoàn toàn có thể là 1 trong error như thế nào kia.

Sơ đồ vật này cầm tắt quá trình:

*

Networking with Combine

Tại phía trên đang cung ứng cho chính mình một cái chú ý tổng quan lập cập về Combine. lúc nào nhằm thực hiện nó vào project của bạn!

Trước tiên, bạn cần chế tạo ra enum GameError nhằm cách xử lý toàn bộ các error Publisher. Từ menu chủ yếu của Xcode, chọn File ▸ New ▸ File với lựa chọn template iOS ▸ Source ▸ Swift File.

Đặt thương hiệu đến tệp tin new là GameError.swift cùng thêm nó vào thư mục Game.

Bây giờ đồng hồ thêm enum GameError:

enum GameError: Error case statusCode case decoding case invalidImage case invalidURL case other(Error) static func map(_ error: Error) -> GameError return (error as? GameError) ?? .other(error) Như vậy cung ứng cho mình toàn bộ các một số loại error hoàn toàn có thể xẩy ra vào lúc chơi game, với một func tiện nghi nhằm dìm error thuộc ngẫu nhiên một số loại làm sao trong GameError và bảo đảm an toàn rằng đó là 1 trong những GameError. quý khách sẽ thực hiện điều đó Lúc thao tác cùng với các publisher.

Cùng cùng với đó, bây giờ, chúng ta sẽ sẵn sàng chuẩn bị xử lí HTTP. status code cùng decoding error.

Tiếp theo, import Combine. Msống UnsplashAPI.swift với thêm phần sau vào đầu file:

import CombineSau đó biến hóa randomImage(completion

*

Xin chúc mừng, ứng dụng của bạn hiện tại áp dụng Combine thành công để giải pháp xử lý các luồng event!

Adding a Score

Như chúng ta cũng có thể nhận ra, Việc ăn được điểm không thể vận động nữa. Trước đây, điểm số của công ty được đếm trong khi bạn chọn đúng hình hình ảnh, hiện nay nó chỉ nằm ở vị trí kia. quý khách vẫn rebuild tác dụng hứa hẹn giờ đó, tuy nhiên với Combine!

Thứ nhất, khôi phục tính năng hứa hẹn giờ thuở đầu bằng phương pháp thay thế // TODO: Handling game score in playGame() with this code:

self.gameTimer = Timer .scheduledTimer(withTimeInterval: 0.1, repeats: true) { timer in self.gameScoreLabel.text = "Score: (self.gameScore)" self.gameScore -= 10 if self.gameScore Trong đoạn code trên, chúng ta lên định kỳ đến trò gameTimer nhằm phun từng 0.1 giây cùng giảm đi 10 điểm. lúc điểm đạt 0, các bạn sẽ invalidate timer.

Bây giờ, build & run để chứng thực rằng điểm số trò nghịch sút Lúc thời gian trôi qua.

*

Using Timers in Combine

Timer là 1 trong những một số loại Foundation không giống có tác dụng Combine được sản xuất nó. Quý khách hàng đang chuyển sang phiên bạn dạng Combine để xem sự khác hoàn toàn.

Ở đầu GameViewController, biến hóa khái niệm của gameTimer:

var gameTimer: AnyCancellable?Bây tiếng bạn đang tàng trữ một subscription vào timer. Như vậy rất có thể được đại diện thay mặt với AnyCancellable vào Combine.

Tgiỏi đổi loại trước tiên của playtrò chơi () cùng stopGame () bởi code sau:

gameTimer?.cancel()// 1self.gameTimer = Timer.publish(every: 0.1, on: RunLoop.main, in: .common) // 2 .autoconnect() // 3 .sink { _ in self.gameScoreLabel.text = "Score: (self.gameScore)" self.gameScore -= 10 if self.gameScore Quý Khách áp dụng API mới cho các publisher từ Timer. quảng cáo online đã thường xuyên gửi date hiện tại theo khoảng tầm thời hạn nhất thiết cơ mà trên vòng lặp sẽ mang đến.

Advertiser là một trong loại publisher quan trọng đặc biệt cần phải nói rõ ràng để start hoặc stop. Toán thù tử .autoconnect cách xử lý vụ việc này bằng phương pháp connecting hoặc disconnecting ngay khi subscriptions start hoặc canceled.

quảng cáo trên internet này sẽ không bắn ra fail, vì chưng vậy các bạn không cần thiết phải gửi sự kiện completion đề nghị nhằm là "_ " . Trong trường vừa lòng này, sink làm cho một subscriber chỉ xử lý các value bằng phương pháp sử dụng closure cơ mà bạn hỗ trợ.

Build & run và play với Combine nào!

*

Refining the App

Chỉ tất cả một vài điều khiển bị thiếu hụt. quý khách hàng sẽ thường xuyên thêm subscriber với .store(in: &subscriptions) nhưng ko bao giờ xóa bọn chúng. Tiếp theo, các bạn sẽ fix nó.

Thêm cái sau vào đầu resetImages ():

subscriptions = <>Tại đây, chúng ta chỉ định và hướng dẫn một mảng trống đang sa thải toàn bộ các tsay đắm chiếu đến các subscriptions không áp dụng.

Tiếp theo, thêm cái sau vào đầu stopGame ():

subscriptions.forEach $0.cancel() Tại phía trên, bạn lặp đi lặp lại toàn bộ các subscriptions cùng cancel chúng.

567live XoiLac TV