Jib*_*ibW 9 reachability ios swift
我只需要在开始与我的iphone应用程序中的服务通信之前检查互联网连接可用性.我使用Swift 1.2和Xcode 6作为我的开发环境......
我刚做了一些研究,发现这个stackoverflow LINK 在目标C中.
因此,我只是试图在SWIFT中找到类似的解决方案,并找到以下链接
https://coderwall.com/p/mhxbpq/checking-for-internet-connection-availability
只是为了让事情变得简单,该链接中的内容如下......
import Foundation
import SystemConfiguration
public class Reachability {
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) ? true : false
}
}
Run Code Online (Sandbox Code Playgroud)
并检查这样的连接可用性...
if Reachability.isConnectedToNetwork()
{
println("Haz Interwebz!")
}
else
{
println("Oh noes! No interwebz!!!")
}
Run Code Online (Sandbox Code Playgroud)
注意:要工作,需要将SystemConfiguration.framework添加到项目中(对于"链接的框架和库")....
所以......我的问题是,对于iOS开发我是一个新手,并且不太确定使用这个逻辑来完成它是多么好和可靠.该课程中的大部分内容都完全不清楚,但我所做的小测试效果很好!!!
想听听ios开发人员对此有何更多体验.
Lac*_*zar 12
我希望今天早上为自己解决同样的问题,我觉得Apple提供的这个"Reachability"示例代码根本不吸引我(主要是因为手动打开套接字和SystemConfiguration丑陋的API).
取而代之的是,我尝试使用Alamofire(我已经将它作为依赖项)与一个随机的不存在的URL建立一个简单的HTTP连接,并检查我将收到的错误中的值.
Alamofire.request(.GET, "http://superrandomdomainnamethatisnotused.com/superrandompath").responseString {
(request, response, stringData, error) in
if let networkError = error {
if (networkError.code == -1009) {
println("No Internet \(error)")
}
}
}
Run Code Online (Sandbox Code Playgroud)
可以使用任何其他网络库重写此代码.错误-1009对应于NSURLErrorNotConnectedToInternet更加令人放心的说法" 你真的没有连接到互联网 ".
另一个好处是,即使您放置了不存在的URL,这也有效,这意味着即使您有Internet连接,也不必向任何服务器发出成功的HTTP请求.
缺点是块中的代码是异步执行的,这可能会给您带来不便,具体取决于您的要求.
@Lachezar对Swift2.x的回答的改进版本:
Alamofire.request(.POST, url).responseJSON { response in
switch response.result {
case .Success(let json):
// internet works.
case .Failure(let error):
if let err = error as? NSURLError where err == .NotConnectedToInternet {
// no internet connection
} else {
// other failures
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果你想要网络状态而不解析URL,我建议这个解决方案:https://stackoverflow.com/a/38646078/706933
| 归档时间: |
|
| 查看次数: |
5943 次 |
| 最近记录: |