2017-05-13 23 views
1

のために私は現在、インターネット接続を確認するために、以下のクラスを使用していますが、ユーザが携帯電話のデータ接続到達可能性をテストセルラーデータ

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(MemoryLayout.size(ofValue: zeroAddress)) 
     zeroAddress.sin_family = sa_family_t(AF_INET) 

     let defaultRouteReachability = withUnsafePointer(to: &zeroAddress) { 
      $0.withMemoryRebound(to: sockaddr.self, capacity: 1) {zeroSockAddress in 
       SCNetworkReachabilityCreateWithAddress(nil, zeroSockAddress) 
      } 
     } 

     var flags: SCNetworkReachabilityFlags = SCNetworkReachabilityFlags(rawValue: 0) 
     if SCNetworkReachabilityGetFlags(defaultRouteReachability!, &flags) == false { 
      return false 
     } 

     let isReachable = flags == .reachable 
     let needsConnection = flags == .connectionRequired 

     return isReachable && !needsConnection 

    } 
} 

を持っている場合、それはtrueを返していない私はそれを返すことができるようにこれを変更する必要があります私はこのクラスを変更する必要があるので、私はこのクラスを変更する必要があるので、私はそれをどうすればいいのか分かりません。

そして使い方は同じです以下: `

if Reachability.isConnectedToNetwork() == true { 
    print("Internet connection OK") 

JSONParseFunction() 

} else { 
     print("Internet connection FAILED") 
     let alert = UIAlertView(title: "You are not connected to internet ", message: "make sure you are connected to internet ", delegate: nil, cancelButtonTitle: "چشم") 
     alert.show() 
    } 
    ` 

答えて

1

スウィフト3: あなたが提供するコードは、無線LANが使用できる場合のみに機能し、携帯データの場合には機能しません。

すぐ下にすなわち

// Only Working for WIFI 

let isReachable = flags == .reachable 
let needsConnection = flags == .connectionRequired 
return isReachable && !needsConnection 

コードの言及行の下にあなたを変更するには、コードを述べすなわち

// Working for both WIFI and Cellular 

//kSCNetworkFlagsReachable: The specified node name or address can be reached using the current network configuration. 

let isReachable = (flags.rawValue & UInt32(kSCNetworkFlagsReachable)) != 0 
let needsConnection = (flags.rawValue & UInt32(kSCNetworkFlagsConnectionRequired)) != 0 
let retVal = (isReachable && !needsConnection) 
return retVal 
+0

おかげで早くあなたのポストよりも私は、これは私より簡単な方法でGitリポジトリから到達可能性クラスを使用していました将来のプロジェクトでそれを使用します – UncleJunior

+0

ようこそ。 BTW到達可能性も良いです。私は個人的に私の異なるプロジェクトでそれを使用しました。 – Maddy

関連する問題