Combine đi với giới từ gì

  -  

Combine được trình làng vài WWDC 2019, là 1 trong framework "reactive" của bao gồm Apple. Quý Khách rất có thể dùng nó nhằm bài toán code của chính mình dễ dàng và đơn giản rộng khi dùng những sản phẩm công nghệ như: delegate, notification, timer, bloông chồng completion, callbaông xã...Quý khách hàng vẫn xem: Combine đi cùng với giới tự gì

Trong lí giả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 đề xuất cần sử dụng Combine vào project của bạn.

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

quý khách sẽ được ra mắt về các knhì niệm chính về nó qua game FindOrLose - một game search image khác hoàn toàn so với 3 image không giống.

Getting Started

Download

Tải về cùng test build project.

Trước Lúc bạn cũng có thể chơi trò chơi, chúng ta cần register trên Unsplash Developers Portal để API key.Sau Lúc đăng ký, các bạn sẽ yêu cầu tạo nên một ứng dụng. Sau Khi xong, các bạn sẽ thấy một màn hình hiển thị như vậy này:


*

Open UnsplashAPI.swift cùng thêm Unsplash API key vào UnsplashAPI.accessToken, giao diện như thế này:

enum UnsplashAPI static let accessToken = "" ...Build and Run. Màn hình thiết yếu hiển thị cho chính mình tứ hình vuông vắn màu sắc xám. Bạn cũng trở nên thấy một button để play hoặc pause trò chơi:


*

Tap Play to lớn start the game:


*

Ngay bây chừ, đấy là game hoạt động không thiếu, tuy thế hãy coi playtrò chơi () vào GameViewControll.swift. Method sinh hoạt cuối như thế này:

} } } } } }Đó là không ít "}" lồng nhau. quý khách hoàn toàn có thể tìm ra phần nhiều gì xảy ra, và theo thứ từ bỏ nào? Điều gì sẽ xảy ra nếu bạn muốn biến hóa thứ từ xảy ra, hoặc bảo lãnh hoặc thêm chức năng mới? Đã cho tới dịp nhằm nhận thấy sự giúp sức từ Combine! =)).

Introduction to Combine

Framework Combine cung ứng API khai báo để xử trí các giá trị theo thời hạn. Có ba yếu tắc chính:

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

Operators: Những đồ vật gì đó mà thao tác với những value.

Subscribers: Những sản phẩm gì đó mà mang value để gia công gì đấy.

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

Publishers

Các Object phù hợp với quảng cáo trên internet cung cấp một chuỗi những value theo thời gian. Giao thức có nhì các loại liên quan: Output - nhiều loại quý giá nhưng nó tạo nên với Failure - nhiều loại error mà lại nó hoàn toàn có thể chạm mặt yêu cầu.

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

Một giá trị cổng output của các loại Output.

Một biểu thị cho thấy thêm đã dứt luồng.

Một lỗi Failure.

Một số một số loại Foundation đã có cách tân để biểu thị chức năng của bọn chúng thông qua các publisher, bao hàm Timer và URLSession, mà lại bạn sẽ thực hiện vào khuyên bảo này.

Operators

Operator là những method đặc trưng được Hotline bên trên những publisher cùng trả về cùng hoặc một publisher khác. Một operator miêu tả một hành vi để biến đổi value, thêm value, loại bỏ value hoặc các hoạt động khác. Bạn hoàn toàn có thể xâu chuỗi các toán tử lại cùng nhau để thực hiện cách xử trí phức tạp.

Hãy nghĩ về những quý hiếm cảm nhận từ bỏ publisher cội thông qua 1 loạt những toán tử. Giống nlỗi một mẫu sông, các quý hiếm đến từ publisher này với đi đến publisher khác.

Subscribers

Các quảng cáo trên internet với operator là vô nghĩa trừ Lúc tất cả nào đó đã "lắng nghe" những sự khiếu nại được ra mắt. Đó là một chiếc nào đấy là Subscriber.

Subscriber nhận thấy một luồng quý giá, sự kiện completion hoặc sự khiếu nại failure tự publisher.

Xem thêm: Game Đua Xe Địa Hình Đua Xe Địa Hình : 9 Kiểu 'Phá Xe'

Putting it together

quảng cáo online bắt đầu phân phát các value khi chúng ta Hotline subscribe( : ) bên trên đó, chuyển hẳn qua subscriber của chúng ta. Tại thời đặc điểm đó, publisher gửi một subscription mang lại subscriber. Sau đó, subscriber hoàn toàn có thể thực hiện subscription này để đưa ra tận hưởng trường đoản cú publisher về con số quý hiếm xác minh hoặc không xác định.

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

Sơ đồ này tóm tắt thừa trình:


*

Networking with Combine

Tại đây đã cung cấp cho chính mình một cái chú ý tổng quan lại lập cập về Combine. Lúc như thế nào để sử dụng nó vào project của bạn!

trước hết, bạn cần tạo nên enum GameError để xử lý toàn bộ các error Publisher. Từ menu chính của Xcode, lựa chọn File ▸ New ▸ File và chọn template iOS ▸ Source ▸ Swift File.

Đặt thương hiệu cho tệp tin mới là GameError.swift với thêm nó vào tlỗi mục Game.

Bây tiếng 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) Điều này cung cấp cho chính mình tất cả các loại error hoàn toàn có thể xẩy ra trong khi thi đấu game, cùng rất một func tiện dụng nhằm nhận error trực thuộc ngẫu nhiên các loại nào trong GameError cùng bảo đảm rằng kia là một trong những GameError. Bạn đang sử dụng điều đó Khi làm việc cùng với các publisher.

Cùng cùng với kia, lúc này, chúng ta đang chuẩn bị up date HTTP status code cùng decoding error.

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

import CombineSau kia biến đổi randomImage(completion

*

Xin chúc mừng, phầm mềm của công ty hiện tại sử dụng Combine thành công để xử trí những luồng event!

Adding a Score

Nhỏng bạn có thể phân biệt, câu hỏi ăn được điểm không hề vận động nữa. Trước phía trên, điểm số của doanh nghiệp được đếm vào khi chúng ta lựa chọn đúng hình ảnh, hiện giờ nó chỉ nằm ở đó. quý khách hàng sẽ rebuild tính năng hứa hẹn giờ đồng hồ đó, tuy vậy với Combine!

Trước tiên, Phục hồi tác dụng hứa giờ đồng hồ thuở đầu bằng phương pháp thay thế sửa chữa // 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 bên trên, các bạn lên kế hoạch đến trò gameTimer để bắn từng 0.1 giây với giảm sút 10 điểm. khi điểm đạt 0, các bạn sẽ invalidate timer.

Bây giờ đồng hồ, build and run nhằm xác thực rằng điểm số trò nghịch giảm lúc thời hạn trôi qua.


Using Timers in Combine

Timer là 1 nhiều loại Foundation không giống có chức năng Combine được phân phối nó. Quý khách hàng vẫn đưa lịch sự phiên phiên bản Combine để thấy sự khác hoàn toàn.

Tại đầu GameViewController, chuyển đổi có mang của gameTimer:

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

Ttốt thay đổi cái đầu tiên của playGame () cùng stoptrò chơi () bằng 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 Bạn áp dụng API bắt đầu cho những publisher tự Timer. Publisher vẫn liên tục gửi date bây chừ theo khoảng thời gian một mực nhưng bên trên vòng lặp đang mang lại.

quảng cáo trên internet là một một số loại publisher đặc biệt quan trọng rất cần được nói ví dụ nhằm start hoặc stop. Tân oán tử .autoconnect xử lý vụ việc này bằng cách connecting hoặc disconnecting ngay trong khi subscriptions start hoặc canceled.

quảng cáo online này không bắn ra fail, vày vậy bạn không cần thiết phải gửi sự kiện completion đề nghị nhằm là "_ " . Trong ngôi trường hòa hợp này, sink khiến cho một subscriber chỉ giải pháp xử lý những value bằng cách thực hiện closure cơ mà chúng ta cung cấp.

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


Refining the App

Chỉ có một vài ba tinh chỉnh và điều khiển bị thiếu. Bạn sẽ tiếp tục thêm subscriber cùng với .store(in: &subscriptions) cơ mà không khi nào xóa bọn chúng. Tiếp theo, bạn sẽ fix nó.

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

subscriptions = Tại trên đây, chúng ta chỉ định một mảng trống sẽ thải trừ toàn bộ những tham mê chiếu cho các subscriptions không áp dụng.

Xem thêm: Assoc Prof Là Gì ? Assoc Prof Dr Là Gì

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

subscriptions.forEach $0.cancel() Tại trên đây, chúng ta lặp đi tái diễn tất cả các subscriptions và cancel chúng.