当我尝试在我的iPhone上检查互联网连接时,我收到了一堆错误.任何人都可以帮我解决这个问题吗?
代码:
import Foundation
import SystemConfiguration
public class Reachability {
class func isConnectedToNetwork() -> Bool {
var zeroAddress = sockaddr_in()
zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress))
zeroAddress.sin_family = sa_family_t(AF_INET)
let defaultRouteReachability = withUnsafePointer(&zeroAddress) {
SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0))
}
var flags: SCNetworkReachabilityFlags = 0
if SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags) == 0 {
return false
}
let isReachable = (flags & UInt32(kSCNetworkFlagsReachable)) != 0
let needsConnection = (flags & UInt32(kSCNetworkFlagsConnectionRequired)) != 0
return (isReachable && !needsConnection) ? true : false
}
}
Run Code Online (Sandbox Code Playgroud)
代码中的错误:
如果不可读,错误1说:
'Int'不能转换为'SCNetworkReachabilityFlags'
错误2和3:
找不到接受提供的参数的'init'的重载
有没有办法检查使用Swift的互联网连接是否可用?
我知道有很多第三方库可以做到这一点,但它们都是用Objective-C编写的.我正在寻找一个Swift替代品.
我正在尝试将此代码段转换为Swift.由于一些困难,我正在努力开始起飞.
- (BOOL) connectedToNetwork
{
// Create zero addy
struct sockaddr_in zeroAddress;
bzero(&zeroAddress, sizeof(zeroAddress));
zeroAddress.sin_len = sizeof(zeroAddress);
zeroAddress.sin_family = AF_INET;
// Recover reachability flags
SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress);
SCNetworkReachabilityFlags flags;
BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);
CFRelease(defaultRouteReachability);
if (!didRetrieveFlags)
{
return NO;
}
BOOL isReachable = flags & kSCNetworkFlagsReachable;
BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired;
return (isReachable && !needsConnection) ? YES : NO;
}
Run Code Online (Sandbox Code Playgroud)
我遇到的第一个和主要问题是如何定义和使用C结构.在struct sockaddr_in zeroAddress;
上面代码的第一行()中,我认为他们正在定义一个zeroAddress
从struct sockaddr_in(?)调用的实例,我假设.我试着宣布var
这样的话.
var zeroAddress …
Run Code Online (Sandbox Code Playgroud) 我的代码snipet如下......:
let defaultRouteReachability = withUnsafePointer(to: &zeroAddress) {
SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0))
}
Run Code Online (Sandbox Code Playgroud)
...不再使用以下错误编译,我不明白:
"'init' is unavailable: use 'withMemoryRebound(to:capacity:_)' to temporarily view memory as another layout-compatible type."
Run Code Online (Sandbox Code Playgroud)
该怎么做才能修复它?
我在我的 iOS 应用程序中使用 Alamofire。我在 viewWillAppear 和 AppDelegate 中使用 bool 值和 NSNotifications 来检查是否有互联网连接。如果没有 wifi 连接,则会出现一个弹出窗口以通知用户。如果有 wifi 连接,弹出窗口就会消失,一切正常。只要wifi显然无法正常工作,我就没有问题。
我正在参加一个聚会,有人向我解释说它的工作方式是它寻找 wifi 连接而不是互联网连接。例如。如果我有一个 wifi 路由器并且它已插入但路由器未连接到互联网 Alamofire 会将此视为成功连接,因为它实际上正在连接到 wifi 虽然它不知道 wifi 无法连接到互联网.
我只是在连接到开放网络的情况下,我的应用程序最初的响应好像我真的连接到了互联网(没有弹出窗口),但我无法连接到任何东西。wifi信号全开。在终端中,我运行了 ping,结果发现连接已死。我的应用程序无法区分。
在这样的情况下,如何让弹出窗口出现?
还有什么是 .case unknown ?
Alamofire.Swift:
import Foundation
import Alamofire
open class NetworkManager {
open static var sharedManager: NetworkReachabilityManager = {
let reachabilityManager = NetworkReachabilityManager()
reachabilityManager?.listener = { (status) in
switch status {
case .notReachable:
print("The network is not reachable")
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "unsuccessful"), object: nil)
case .unknown : //???????
print("It is …
Run Code Online (Sandbox Code Playgroud) 我正在开发一个我需要知道的应用程序:
我知道你可以使用Reachability来检查设备是否已连接到互联网,但即使应用程序没有访问网络的权限,它也会返回true.我怎么知道上面列出的2个信息?
附加信息:这不是常规应用程序.此应用程序用于通过WIFI控制玩具.所以我真的不在乎应用是否连接到互联网.我想知道的是,该应用程序是否具有访问WLAN网络的权限.
你怎么能通知用户没有与 swift 3 的网络连接。我已经尝试了很多解决方案,但到目前为止都没有奏效。我不是在寻找网络连接的速度
ios ×5
swift ×5
reachability ×4
alamofire ×1
c ×1
iphone ×1
networking ×1
permissions ×1
struct ×1
swift3 ×1
xcode ×1
xcode8-beta6 ×1