我正在尝试构建一个简单的应用程序,它实际上包装了一个网页,但我不想在设备没有连接时打开网络视图并显示消息。我找到了一个 URLSessionConfiguration,但我不知道如何实现它,非常感谢您的帮助
到目前为止的代码
class ViewController: UIViewController {
@IBOutlet weak var myWebView: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
let url = URL(string: "https://neti.ee")
let config = URLSessionConfiguration.default
config.waitsForConnectivity = true
config.timeoutIntervalForResource = 300
let session = URLSession(configuration: config)
session.dataTask(with: url!) { data, response, error in
}
myWebView.load(URLRequest(url: url!));
let label = UILabel(frame: CGRect(x: 100, y: 200, width: 220, height: 50))
label.text = "Please connect to the internet";
self.view.addSubview(label)
}
}
尝试这个方法
import SystemConfiguration
static func isInternetAvailable() -> Bool
{
var zeroAddress = sockaddr_in()
zeroAddress.sin_len = UInt8(MemoryLayout.size(ofValue: zeroAddress))
zeroAddress.sin_family = sa_family_t(AF_INET)
let defaultRouteReachability = withUnsafePointer(to: &zeroAddress) {
$0.withMemoryRebound(to: sockaddr.self, capacity: 1) {zeroSockAddress in
SCNetworkReachabilityCreateWithAddress(nil, zeroSockAddress)
}
}
var flags = SCNetworkReachabilityFlags()
if !SCNetworkReachabilityGetFlags(defaultRouteReachability!, &flags) {
return false
}
let isReachable = flags.contains(.reachable)
let needsConnection = flags.contains(.connectionRequired)
return (isReachable && !needsConnection)
}
您可以简单地将此文件导入到您的项目中: 可达性
然后,在你的 viewController 中你可以像这样检查连接:
class ViewController: UIViewController {
let reachability = try! Reachability()
override func viewDidLoad() {
super.viewDidLoad()
reachability.whenReachable = { _ in
//connected
}
reachability.whenUnreachable = { _ in
//not connected
}
NotificationCenter.default.addObserver(self, selector: #selector(internetChanged), name: Notification.Name.reachabilityChanged , object: reachability)
do{
try reachability.startNotifier()
} catch {
print("Could not strat notifier")
}
}
@objc
func internetChanged(note: Notification) {
//do something
}
}
如果您正在寻找一种侦听互联网连接状态变化并在互联网被禁用时触发的方法,您可以使用 iOS 12 中引入的
NWPathMonitor
框架中的 Network
类。 pathUpdateHandler
每当网络路径发生变化(包括互联网连接状态发生变化)时,都会调用 NWPathMonitor
的关闭。
以下是如何使用
NWPathMonitor
来实现此目的:
import UIKit
import Network
class ViewController: UIViewController {
let monitor = NWPathMonitor()
var internetIsAvailable = false
override func viewDidLoad() {
super.viewDidLoad()
// Start monitoring network path updates
monitor.pathUpdateHandler = { path in
self.internetIsAvailable = path.status == .satisfied
DispatchQueue.main.async {
self.handleInternetConnectivityChange()
}
}
let queue = DispatchQueue(label: "NetworkMonitor")
monitor.start(queue: queue)
}
func handleInternetConnectivityChange() {
if internetIsAvailable {
print("Internet is enabled")
// Internet is enabled, you can perform actions here
} else {
print("Internet is disabled")
// Internet is disabled, you can perform actions here
}
}
}