当我尝试在我的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'的重载
我不确定这是否可行,但我有这种情况.
我的UIWebView中显示了一个网站,该网站在UISegmentedController中设置了链接.他们的网站可以检测您是在wifi上还是在3g网络上.
现在,分段控制器指向2个不同的页面:1 - iPhone友好登录屏幕2 - 主页,一旦您登录.
现在问题是:
我可以编程我的应用程序来检测它是WIFI还是3G(我知道你可以这样做),但是根据答案转到第1或第2部分
有点像这样:
if (iPhone device is on 3g) {
Go to Segment 1;
} else {
Go to Segment 0;
}
Run Code Online (Sandbox Code Playgroud) 有没有办法检查使用Swift的互联网连接是否可用?
我知道有很多第三方库可以做到这一点,但它们都是用Objective-C编写的.我正在寻找一个Swift替代品.
我们如何在swift编程语言中定义以下内容:
换句话说,这些客观c术语中的每一个都是迅速等同的.此外,还想知道是否存在非结构c类型(如结构和枚举)的特定用例.提前致谢.
我的代码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 9,我使用Reachability公共类来检查设备是否连接到互联网.我将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)
}
}
Run Code Online (Sandbox Code Playgroud) 如果我有一个像这样的方法:
func someMethod(contextPtr: UnsafeMutablePointer<Void>)
Run Code Online (Sandbox Code Playgroud)
我如何从中获取对象contextPtr
?
func someMethod(contextPtr: UnsafeMutablePointer<Void>){
let object:MyObject = contextPtr.memory
}
Run Code Online (Sandbox Code Playgroud)
得到:
'Void'不能转换为'MyObject'
什么是秘诀
更多详情:
我在这里做的是设置一个全局回调函数SCNetworkReachability
:
func callback(reachability:SCNetworkReachability, flags: SCNetworkReachabilityFlags, info: UnsafeMutablePointer<Void>) {
let r:Reachability = info.memory
}
Run Code Online (Sandbox Code Playgroud)
然后添加回调如下:
var context = SCNetworkReachabilityContext(version: 0, info: nil, retain: nil, release: nil, copyDescription: nil)
var s = self
withUnsafeMutablePointer(&s) {
context.info = UnsafeMutablePointer($0)
}
SCNetworkReachabilitySetCallback(reachability, callback, &context)
Run Code Online (Sandbox Code Playgroud) 我正在开发一个用Swift编写的iOS应用程序,它与本地网络上的HTTP服务器通信,我正在使用Apple的Reachability类来确定运行HTTP服务器的远程机器是否在线.这是代码:
...
let RemoteHost: String = "192.168.178.130"
var RemoteReachability: Reachability! = nil
var RemoteIsReachable: Bool = false
init() {
super.init()
self.RemoteReachability = Reachability(hostName: self.RemoteHost)
NSNotificationCenter.defaultCenter().addObserver(self, selector: "reachabilityChanged:", name: kReachabilityChangedNotification, object: self.RemoteReachability)
self.RemoteReachability.startNotifier()
self.RemoteIsReachable = (self.RemoteReachability.currentReachabilityStatus().value == ReachableViaWiFi.value)
}
func reachabilityChanged(notification: NSNotification) {
let ReachabilityInst: Reachability = notification.object as Reachability
self.RemoteIsReachable = (ReachabilityInst.currentReachabilityStatus().value == ReachableViaWiFi.value)
}
Run Code Online (Sandbox Code Playgroud)
问题是无论远程机器是在线还是离线,
(ReachabilityInst.currentReachabilityStatus().value == ReachableViaWiFi.value)
Run Code Online (Sandbox Code Playgroud)
只要我连接到Wifi网络,总是如此.但是,当我关闭Wifi时,它会导致错误而不是真实.我在这里做错了什么,或者Reachability类是否与Swift/xCode 6 Beta不兼容?我也试过这个:
(ReachabilityInst.currentReachabilityStatus() == ReachableViaWiFi)
Run Code Online (Sandbox Code Playgroud)
但是这导致xCode告诉我"无法找到接受所提供参数的'=='的重载",即使两者看起来都是'NetworkStatus'类型.
提前致谢.
如果在Alamofire中没有互联网连接时发生错误,我应该如何处理.我试过检查数据是否为零但不起作用.
以下是我如何使用Alamofire
Alamofire.request(.POST, REGISTER_URL, parameters: parameters, encoding: .JSON, headers: getAuthenticationHeader()).response { (request, response, data, errorType) -> Void in
let resultObject: APIResults = APIResults(JSONDecoder(data!));
let responseCode: Int = Int(resultObject.code!)!;// THIS CRASHES WHEN THERE IS NO INTERNET CONNECTION
if (responseCode == 200) {
available = true;
}
finished = true;
}
Run Code Online (Sandbox Code Playgroud) 如果无法访问互联网,是否可以通过编程方式区分以下权限案例?
我想阅读那些无线数据权限,以区分上述情况以获得更友好的错误消息(即在一种情况下我建议验证权限,在另一种情况下我建议检查飞行模式)
基于如何在Swift中使用SCNetworkReachability,我所能找到的就是获得互联网可达性,但它不知道实际的权限:
import SystemConfiguration
@available(iOS 9.0, macOS 10.11, *)
static func internetConnectionIsReachable() -> Bool {
var zeroAddress = sockaddr_in6()
zeroAddress.sin6_len = UInt8(MemoryLayout<sockaddr_in6>.size)
zeroAddress.sin6_family = sa_family_t(AF_INET6)
guard let reachability = withUnsafePointer(to: &zeroAddress, {
$0.withMemoryRebound(to: sockaddr.self, capacity: 1) {
SCNetworkReachabilityCreateWithAddress(nil, $0)
}
}) else {
return false
}
var flags: SCNetworkReachabilityFlags = []
guard SCNetworkReachabilityGetFlags(reachability, &flags) else {
return false
}
return flags.contains(.reachable)
}
Run Code Online (Sandbox Code Playgroud) ios ×7
swift ×6
reachability ×4
swift2 ×2
swift3 ×2
3g ×1
alamofire ×1
ios10 ×1
objective-c ×1
pointers ×1
wifi ×1
xcode ×1
xcode8-beta6 ×1