相关疑难解决方法(0)

检查与Swift的互联网连接

当我尝试在我的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'的重载

xcode reachability ios swift

238
推荐指数
18
解决办法
20万
查看次数

iOS检测3G或WiFi

我不确定这是否可行,但我有这种情况.

我的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)

objective-c wifi reachability 3g ios

105
推荐指数
6
解决办法
9万
查看次数

检查Swift中的互联网连接可用性

有没有办法检查使用Swift的互联网连接是否可用?

我知道有很多第三方库可以做到这一点,但它们都是用Objective-C编写的.我正在寻找一个Swift替代品.

ios network-connection swift

105
推荐指数
5
解决办法
8万
查看次数

在快速语言中为null/nil

我们如何在swift编程语言中定义以下内容:

  • 空值
  • [NSNull null]

换句话说,这些客观c术语中的每一个都是迅速等同的.此外,还想知道是否存在非结构c类型(如结构和枚举)的特定用例.提前致谢.

ios swift

68
推荐指数
5
解决办法
8万
查看次数

Swift 3 UnsafePointer($ 0)不再在Xcode 8 beta 6中编译

我的代码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)

该怎么做才能修复它?

unsafe-pointers swift3 xcode8-beta6

60
推荐指数
3
解决办法
2万
查看次数

检查互联网连接(iOS 10)

对于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)

internet-connection swift3 ios10

49
推荐指数
4
解决办法
5万
查看次数

Swift 2 - UnsafeMutablePointer <Void>到对象

如果我有一个像这样的方法:

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)

pointers swift swift2

22
推荐指数
1
解决办法
9698
查看次数

使用Apple的Reachability检查Swift中的远程服务器可访问性

我正在开发一个用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'类型.

提前致谢.

reachability ios swift

16
推荐指数
2
解决办法
2万
查看次数

在尝试解析Alamofire中的结果之前处理无Internet连接错误

如果在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)

ios swift alamofire swift2

13
推荐指数
4
解决办法
2万
查看次数

我们可以在iOS上阅读无线数据权限吗?

如果无法访问互联网,是否可以通过编程方式区分以下权限案例?

  1. 用户拒绝为应用程序使用数据的权限的情况.
  2. 用户已授予使用数据权限但手机处于飞行模式(或根本没有SIM/WiFi)的情况.

允许应用使用数据

我想阅读那些无线数据权限,以区分上述情况以获得更友好的错误消息(即在一种情况下我建议验证权限,在另一种情况下我建议检查飞行模式)

基于如何在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)

reachability ios ios-permissions

6
推荐指数
1
解决办法
145
查看次数