Combine Đi Với Giới Từ Gì

  -  

Combine được ra mắt vài ba WWDC 2019, là một trong framework "reactive" của bao gồm Apple. Quý khách hàng có thể cần sử dụng nó để Việc code của bản thân đơn giản rộng khi dùng những sản phẩm như: delegate, notification, timer, blochồng completion, callbachồng...quý khách đã xem: Combine đi với giới từ bỏ gì

Trong chỉ dẫn này vẫn bao gồm:

Cách cần sử dụng Pulisher với Subcriber.Handler sự kiện streams.Dùng Timer theo cách của Combinelúc như thế nào nên dùng Combine vào project của người tiêu dùng.

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

quý khách đang xem: Combine đi cùng với giới tự gì

quý khách sẽ được ra mắt về những knhì niệm bao gồm về nó qua game FindOrLose - một game tìm kiếm image khác hoàn toàn đối với 3 image khác.

Getting Started

Download

Tải về và demo build project.

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


*

mở cửa UnsplashAPI.swift và thêm Unsplash API key vào UnsplashAPI.accessToken, thứ hạng như vậy này:

enum UnsplashAPI static let accessToken = "" ...Build and Run. Màn hình bao gồm hiển thị cho mình tứ hình vuông vắn color xám. Quý khách hàng cũng trở thành thấy một button nhằm play hoặc pause trò chơi:


*

Tap Play to start the game:


*

Ngay hiện giờ, đây là game chuyển động khá đầy đủ, tuy vậy hãy xem playGame () trong GameViewControll.swift. Method ngơi nghỉ cuối như thế này:

} } } } } }Đó là rất nhiều "}" lồng nhau. Quý khách hàng hoàn toàn có thể đưa ra đều gì xảy ra, cùng theo sản phẩm công nghệ từ nào? Điều gì sẽ xẩy ra nếu như bạn có nhu cầu biến hóa vật dụng từ bỏ xẩy ra, hoặc bảo lãnh hoặc thêm tính năng mới? Đã tới dịp nhằm cảm nhận sự hỗ trợ từ Combine! =)).

Introduction to lớn Combine

Framework Combine cung cấp API khai báo nhằm giải pháp xử lý các giá trị theo thời gian. Có ba nhân tố chính:

Publishers: Những đồ vật gì đó mà bắn ra value.

Operators: Những máy gì đó mà làm việc cùng với những value.

Subscribers: Những thiết bị gì này mà rước value để triển khai nào đấy.

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

Publishers

Các Object tương xứng với quảng cáo online cung cấp một chuỗi các value theo thời hạn. Giao thức có nhì loại liên quan: đầu ra - các loại giá trị mà nó tạo nên cùng Failure - các loại error mà nó có thể chạm chán cần.

Mỗi publisher rất có thể emit những sự kiện:

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

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

Một lỗi Failure.

Một số các loại Foundation đã làm được cách tân để mô tả tác dụng của bọn chúng thông qua các publisher, bao gồm Timer và URLSession, nhưng các bạn sẽ sử dụng trong giải đáp này.

Operators

Operator là những method quan trọng được Gọi trên những publisher với trả về thuộc hoặc một publisher không giống. Một operator biểu lộ một hành động để thay đổi value, thêm value, loại bỏ value hoặc nhiều vận động không giống. quý khách có thể xâu chuỗi những tân oán tử lại cùng nhau nhằm thực hiện xử trí tinh vi.

Hãy nghĩ về các giá trị nhận thấy từ publisher cội thông sang 1 loạt các toán tử. Giống nhỏng một chiếc sông, các cực hiếm tới từ publisher này với đi mang đến publisher không giống.

Subscribers

Các quảng cáo online với operator là bất nghĩa trừ Lúc tất cả gì đó sẽ "lắng nghe" các sự khiếu nại được ra mắt. Đó là một cái nào đấy là Subscriber.

Xem thêm: Các Loại Trò Chơi Cờ Trên Thế Giới, Tổng Hợp Các Môn Thể Thao Trí Tuệ

Putting it together

quảng cáo trên internet bước đầu phát các value khi bạn Điện thoại tư vấn subscribe( : ) trên kia, chuyển qua subscriber của doanh nghiệp. Tại thời đặc điểm này, publisher gửi một subscription cho subscriber. Sau kia, subscriber hoàn toàn có thể sử dụng subscription này để lấy ra đề xuất tự publisher về số lượng giá trị xác định hoặc không khẳng định.

Sau kia, publisher hoàn toàn có thể tự do thoải mái gửi các value cho Subscriber. Nó hoàn toàn có thể gửi vừa đủ số lượng value được trải đời, nhưng mà nó cũng hoàn toàn có thể gửi thấp hơn. Nếu publisher là hữu hạn thì sau cùng nó đang trả về event completion hoặc rất có thể là một trong những error làm sao kia.

Sơ vật dụng này cầm tắt thừa trình:


*

Networking with Combine

Tại đây đã hỗ trợ cho bạn một cái chú ý tổng quan lại nhanh lẹ về Combine. Lúc như thế nào để áp dụng nó trong project của bạn!

Đầu tiên, bạn cần sinh sản enum GameError để xử trí tất cả các error Publisher. Từ thực đơn chính của Xcode, lựa chọn File ▸ New ▸ File cùng chọn template iOS ▸ Source ▸ Swift File.

Đặt tên cho tệp tin mới là GameError.swift cùng thêm nó vào thỏng 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) Như vậy cung ứng cho bạn tất cả các nhiều loại error hoàn toàn có thể xẩy ra trong lúc chơi game, cùng với một func tiện lợi để dấn error thuộc ngẫu nhiên loại như thế nào vào GameError và bảo đảm rằng kia là một GameError. quý khách hàng sẽ áp dụng điều này lúc làm việc cùng với những publisher.

Cùng với đó, bây giờ, bạn đã chuẩn bị sẵn sàng up date HTTP status code cùng decoding error.

Tiếp theo, import Combine. Mlàm việc UnsplashAPI.swift và góp phần sau vào đầu file:

import CombineSau kia thay đổi randomImage(completion

*

Xin chúc mừng, tiện ích của chúng ta hiện sử dụng Combine thành công nhằm xử trí những luồng event!

Adding a Score

Nhỏng chúng ta có thể nhận ra, vấn đề ăn được điểm không thể vận động nữa. Trước phía trên, điểm số của doanh nghiệp được đếm trong khi bạn lựa chọn đúng hình ảnh, hiện thời nó chỉ nằm ở vị trí đó. Quý khách hàng đã rebuild công dụng hứa giờ đồng hồ kia, tuy nhiên với Combine!

Trước tiên, phục sinh tính năng hứa hẹn giờ ban đầu bằng cách 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ỳ mang lại trò gameTimer nhằm bắn từng 0.1 giây cùng giảm sút 10 điểm. Khi điểm đạt 0, bạn sẽ invalidate timer.

Bây giờ đồng hồ, build và run để chứng thực rằng điểm số trò đùa sút khi thời gian trôi qua.

Using Timers in Combine

Timer là 1 nhiều loại Foundation không giống gồm tính năng Combine được chế tạo nó. Bạn vẫn chuyển sang trọng phiên bản Combine giúp thấy sự biệt lập.

Tại đầu GameViewController, thay đổi định nghĩa của gameTimer:

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

Ttốt đổi mẫu trước tiên của playGame () và 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 thực hiện API mới cho những publisher từ Timer. quảng cáo trên internet đang tiếp tục gửi date hiện giờ theo khoảng chừng thời hạn nhất mực mà lại bên trên vòng lặp vẫn mang lại.

quảng cáo online là 1 một số loại publisher quan trọng cần phải nói ví dụ để start hoặc stop. Toán tử .autoconnect xử lý sự việc này bằng phương pháp connecting hoặc disconnecting ngay trong khi subscriptions start hoặc canceled.

Advertiser này không bắn ra fail, bởi vậy các bạn không cần phải gửi event completion đề xuất nhằm là "_ " . Trong trường thích hợp này, sink khiến cho một subscriber chỉ cách xử lý những value bằng phương pháp thực hiện closure nhưng bạn cung cấp.

Build and run với play cùng với Combine nào!

Refining the App

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

Xem thêm: Chẩn Đoán Và Điều Trị Nhược Cơ ( Myasthenia Gravis Là Bệnh Gì ?

Thêm mẫu sau vào đầu resetImages ():

Tiếp theo, thêm chiếc 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 cùng cancel chúng.