我想检查一下我是否可以在iOS上使用Cocoa Touch库或在macOS上使用Cocoa库连接互联网。
我想出了一个方法来做这个使用NSURL。我的方法似乎有点不可靠(因为即使谷歌也可能有一天宕机,依赖第三方似乎很糟糕),虽然如果谷歌没有响应,我可以检查其他一些网站的响应,但这似乎是浪费和不必要的应用程序开销。
- (BOOL)connectedToInternet {
NSString *URLString = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com"]];
return ( URLString != NULL ) ? YES : NO;
}
是我做得不好,(更不用说stringWithContentsOfURL已弃用在iOS 3.0和macOS 10.4),如果是这样,有什么更好的方法来实现这一点?
检查Internet连接的可用性(iOS) Xcode 8, Swift 3.0
这是一个简单的方法来检查网络可用性,如我们的设备是否连接到任何网络。我已经成功地将其翻译为Swift 3.0,这里是最终的代码。现有的Apple Reachability类和其他第三方库似乎太复杂了,无法翻译到Swift中。
这适用于3G、4G和WiFi连接。
不要忘记在你的项目构建器中添加“SystemConfiguration.framework”。
//Create new swift class file Reachability in your project.
import SystemConfiguration
public class InternetReachability {
class func isConnectedToNetwork() -> Bool {
var zeroAddress = sockaddr_in(sin_len: 0, sin_family: 0, sin_port: 0, sin_addr: in_addr(s_addr: 0), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0))
zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress))
zeroAddress.sin_family = sa_family_t(AF_INET)
let defaultRouteReachability = withUnsafePointer(&zeroAddress) {
SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0)).takeRetainedValue()
}
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
}
}
// Check network connectivity from anywhere in project by using this code.
if InternetReachability.isConnectedToNetwork() == true {
print("Internet connection OK")
} else {
print("Internet connection FAILED")
}
检查Internet连接的可用性(iOS) Xcode 8, Swift 3.0
这是一个简单的方法来检查网络可用性,如我们的设备是否连接到任何网络。我已经成功地将其翻译为Swift 3.0,这里是最终的代码。现有的Apple Reachability类和其他第三方库似乎太复杂了,无法翻译到Swift中。
这适用于3G、4G和WiFi连接。
不要忘记在你的项目构建器中添加“SystemConfiguration.framework”。
//Create new swift class file Reachability in your project.
import SystemConfiguration
public class InternetReachability {
class func isConnectedToNetwork() -> Bool {
var zeroAddress = sockaddr_in(sin_len: 0, sin_family: 0, sin_port: 0, sin_addr: in_addr(s_addr: 0), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0))
zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress))
zeroAddress.sin_family = sa_family_t(AF_INET)
let defaultRouteReachability = withUnsafePointer(&zeroAddress) {
SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0)).takeRetainedValue()
}
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
}
}
// Check network connectivity from anywhere in project by using this code.
if InternetReachability.isConnectedToNetwork() == true {
print("Internet connection OK")
} else {
print("Internet connection FAILED")
}
很简单的…试试下面这些步骤:
步骤1:将SystemConfiguration框架添加到项目中。
步骤2:将以下代码导入到头文件中。
#import <SystemConfiguration/SystemConfiguration.h>
第三步:使用以下方法
类型1:
- (BOOL) currentNetworkStatus {
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
BOOL连接;
BOOL与;
Const char *host = "www.apple.com";
SCNetworkReachabilityRef reachabilityreachabilitycreatewithname (NULL, host);
SCNetworkReachabilityFlags旗帜;
connected = SCNetworkReachabilityGetFlags(可达性,&flags);
isConnected = NO;
isConnected = connected && (flags & kSCNetworkFlagsReachable) && !(flags & kSCNetworkFlagsConnectionRequired);
CFRelease(可达性);
返回与;
}
类型2:
导入头文件:# Import "Reachability.h"
(保龄球)currentNetworkStatus
{
可达性*可达性=[互联网连接的可达性];
NetworkStatus NetworkStatus =[可达性currentReachabilityStatus];
返回networkStatus !=不可访问;
}
第四步:使用方法:
- (void)CheckInternet
{
BOOL network = [self currentNetworkStatus];
if (network)
{
NSLog(@"Network Available");
}
else
{
NSLog(@"No Network Available");
}
}