Khung Mạng của Apple cung cấp một số lớp hữu ích để làm việc với dữ liệu mạng, bao gồm một lớp được thiết kế đặc biệt để giám sát khả năng truy cập mạng: NWPathMonitor. Nếu bạn đã từng sử dụng hệ thống Reachability cũ hơn của Apple, NWPathMonitor sẽ thay thế nó hoàn toàn.
Để bắt đầu, trước tiên hãy thêm nội dung nhập cho Networkkhung:
import Network
Tiếp theo, tạo một thể hiện của NWPathMonitor một nơi nào đó nó sẽ không được giải phóng ngay lập tức. Ví dụ: bạn có thể có nó làm thuộc tính trên bộ điều khiển chế độ xem, ví dụ:
let monitor = NWPathMonitor()
Bây giờ chỉ định đóng cho màn hình đó sẽ được kích hoạt bất cứ khi nào khả năng truy cập mạng thay đổi. Điều này cần chấp nhận một tham số, đó là NWPath mô tả khả năng truy cập mạng hiện có.
NWPath có một số thuộc tính nhưng có hai thuộc tính đặc biệt mà bạn có thể quan tâm: status mô tả xem kết nối hiện có sẵn hay không và isExpensive được đặt thành true khi sử dụng dữ liệu di động hoặc khi sử dụng WiFi là điểm phát sóng được định tuyến qua mạng di động của iPhone sự liên quan.
Để thử điều này, đây là một số mã in thông báo khi trạng thái kết nối của người dùng thay đổi, đồng thời in xem kết nối có được coi là tốn kém hay không:
monitor.pathUpdateHandler = { path in
if path.status == .satisfied {
print("We're connected!")
} else {
print("No connection.")
}
print(path.isExpensive)
}
Hãy nhớ rằng việc đóng đó sẽ được gọi mỗi khi trạng thái kết nối thay đổi.
Sau khi trình giám sát đường dẫn của bạn được tạo và định cấu hình, bước cuối cùng là tạo một DispatchQueue phiên bản tùy chỉnh để màn hình chạy, sau đó gọi start() phương thức của nó:
let queue = DispatchQueue(label: "Monitor")
monitor.start(queue: queue)
Khi đã xong, việc đóng của bạn sẽ được gọi mỗi khi trạng thái kết nối thay đổi, vì vậy bạn có thể thêm mã vào đó để cập nhật phần còn lại của ứng dụng với trạng thái kết nối hiện tại.
Nếu bạn muốn kiểm soát chi tiết hơn việc kiểm tra mạng, bạn có thể tạo NWPathMonitor bằng cách sử dụng một loại giao diện cụ thể. Ví dụ: nếu bạn đặc biệt muốn kiểm tra dữ liệu di động và chỉ dữ liệu di động, bạn sẽ viết điều này:
let cellMonitor = NWPathMonitor(requiredInterfaceType: .cellular)
Bạn cũng có thể sử dụng .wifi hoặc thậm chí wiredEthernet nếu bạn muốn. Việc bỏ qua loại giao diện sẽ khiến tất cả chúng được xem cùng lúc, đây có thể là điều bạn luôn mong muốn.
Bình luận