对于iOS 9,我使用了可达性公共类来检查设备是否连接到了互联网。我将我的Swift 2代码转换为Swift 3,但Reachability不再工作。有人能告诉我如何检查iOS 10的互联网连接吗?谢谢!下面是代码片段:
open class Reachability {
class func isConnectedToNetwork() -> 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) {
SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0))
}
var flags = SCNetworkReachabilityFlags()
if !SCNetworkReachabilityGetFlags(defaultRouteReachability!, &flags) {
return false
}
let isReachable = (flags.rawValue & UInt32(kSCNetworkFlagsReachable)) != 0
let needsConnection = (flags.rawValue & UInt32(kSCNetworkFlagsConnectionRequired)) != 0
return (isReachable && !needsConnection)
}
}发布于 2016-10-20 16:09:39
import Foundation
import SystemConfiguration
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)
}这在iOS 10中有效
发布于 2017-03-30 13:36:52
第一步:在你的项目中创建一个swift文件。我创造了"ConnectionCheck.swift“
步骤2:将此代码添加到"ConnectionCheck.swift“文件中,并将"import SystemConfiguration”文件导入到"ConnectionCheck.swift“和"ViewController.swift”文件中。
import Foundation
import SystemConfiguration
public class ConnectionCheck {
class func isConnectedToNetwork() -> Bool {
var zeroAddress = sockaddr_in()
zeroAddress.sin_len = UInt8(MemoryLayout<sockaddr_in>.size)
zeroAddress.sin_family = sa_family_t(AF_INET)
guard let defaultRouteReachability = withUnsafePointer(to: &zeroAddress, {
$0.withMemoryRebound(to: sockaddr.self, capacity: 1) {
SCNetworkReachabilityCreateWithAddress(nil, $0)
}
}) else {
return false
}
var flags: SCNetworkReachabilityFlags = []
if !SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags) {
return false
}
let isReachable = flags.contains(.reachable)
let needsConnection = flags.contains(.connectionRequired)
return (isReachable && !needsConnection)
}}
步骤3:现在在"ViewController.swift“中使用以下代码来检查网络的可达性
if ConnectionCheck.isConnectedToNetwork() {
print("Connected")
}
else{
print("disConnected")
}发布于 2017-10-16 18:30:08
这段代码对你很有帮助。它适用于我在Swift 4和Xcode 9中的工作
转到https://github.com/ashleymills/Reachability.swift/tree/master/Reachability并将Reachability.swift文件复制到项目中
Vasil Nunev清楚地解释了这个可达性https://www.youtube.com/watch?v=wDZmz9IsB-8
class ViewController: UIViewController {
let reachability = Reachability();
override func viewDidLoad() {
super.viewDidLoad()
reachability?.whenReachable = { _ in
DispatchQueue.main.async {
self.view.backgroundColor = UIColor.green
}
}
reachability?.whenUnreachable = { _ in
DispatchQueue.main.async {
self.view.backgroundColor = UIColor.red
}
}
NotificationCenter.default.addObserver(self, selector: #selector(internetChanged), name: Notification.Name.reachabilityChanged , object: reachability)
do{
try reachability?.startNotifier()
}catch{
print("Could not start notifier:\(error)")
}
}
@objc func internetChanged(note:Notification) {
let reachability = note.object as! Reachability
if reachability.connection != .none {
if reachability.connection == .wifi{
DispatchQueue.main.async {
self.view.backgroundColor = #colorLiteral(red: 0.3411764801, green: 0.6235294342, blue: 0.1686274558, alpha: 1)
}
}else if reachability.connection == .cellular{
DispatchQueue.main.async {
self.view.backgroundColor = #colorLiteral(red: 0.3647058904, green: 0.06666667014, blue: 0.9686274529, alpha: 1)
}
}
}else{
DispatchQueue.main.async {
self.view.backgroundColor = #colorLiteral(red: 0.7450980544, green: 0.1568627506, blue: 0.07450980693, alpha: 1)
}
}
}
}https://stackoverflow.com/questions/39558868
复制相似问题