web-dev-qa-db-ja.com

AlamofireでNetworkReachabilityManagerを使用する方法

SwiftのAlamofire NetworkReachabilityManagerを備えたObjective-CのAFNetworkingと同様の機能が必要です。

//Reachability detection
[[AFNetworkReachabilityManager sharedManager] startMonitoring];
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
    switch (status) {
        case AFNetworkReachabilityStatusReachableViaWWAN: {
            [self LoadNoInternetView:NO];
            break;
        }
        case AFNetworkReachabilityStatusReachableViaWiFi: {
            [self LoadNoInternetView:NO];
            break;
        }
        case AFNetworkReachabilityStatusNotReachable: {
            break;
        }
        default: {
            break;
        }
    }
}];

私は現在、リスナーを使用してネットワークのステータスの変化を把握しています

let net = NetworkReachabilityManager()
net?.startListening()

誰かがそれらのユースケースをサポートする方法を説明できますか?

21
MuraliMohan

私は自分自身で答えを見つけました。つまり、以下に記載されているように、クロージャーを持つリスナーを書くだけです:

let net = NetworkReachabilityManager()

net?.listener = { status in
    if net?.isReachable ?? false {

    switch status {

    case .reachable(.ethernetOrWiFi):
        print("The network is reachable over the WiFi connection")

    case .reachable(.wwan):
        print("The network is reachable over the WWAN connection")

    case .notReachable:
        print("The network is not reachable")

    case .unknown :
        print("It is unknown whether the network is reachable")

    }
}

net?.startListening()
18
MuraliMohan

NetworkManagerクラス

class NetworkManager {

//shared instance
static let shared = NetworkManager()

let reachabilityManager = Alamofire.NetworkReachabilityManager(Host: "www.google.com")

func startNetworkReachabilityObserver() {

    reachabilityManager?.listener = { status in
        switch status {

            case .notReachable:
                print("The network is not reachable")

            case .unknown :
                print("It is unknown whether the network is reachable")

            case .reachable(.ethernetOrWiFi):
                print("The network is reachable over the WiFi connection")

            case .reachable(.wwan):
                print("The network is reachable over the WWAN connection")

            }
        }

        // start listening
        reachabilityManager?.startListening()
   }
}

ネットワーク到達可能性監視を開始

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

        // add network reachability observer on app start
        NetworkManager.shared.startNetworkReachabilityObserver()

        return true
    }
}
34
Kirit Vaghela

これが私の実装です。私はシングルトンでそれを使用します。リーチャビリティマネージャのリファレンスを忘れずに保持してください。

let reachabilityManager = Alamofire.NetworkReachabilityManager(Host: "www.Apple.com")

func listenForReachability() {
    self.reachabilityManager?.listener = { status in
        print("Network Status Changed: \(status)")
        switch status {
        case .NotReachable:
            //Show error state
        case .Reachable(_), .Unknown:
            //Hide error state
        }
    }

    self.reachabilityManager?.startListening()
}
16
rmooney

ReachabilityManagerの参照を保持している限り、シングルトンの使用は機能しています

class NetworkStatus {
static let sharedInstance = NetworkStatus()

private init() {}

let reachabilityManager = Alamofire.NetworkReachabilityManager(Host: "www.Apple.com")

func startNetworkReachabilityObserver() {
    reachabilityManager?.listener = { status in

        switch status {

        case .notReachable:
            print("The network is not reachable")

        case .unknown :
            print("It is unknown whether the network is reachable")

        case .reachable(.ethernetOrWiFi):
            print("The network is reachable over the WiFi connection")

        case .reachable(.wwan):
            print("The network is reachable over the WWAN connection")

        }
    }
    reachabilityManager?.startListening()
}

したがって、アプリのどこでも次のように使用できます。

let networkStatus = NetworkStatus.sharedInstance

override func awakeFromNib() {
    super.awakeFromNib()
    networkStatus.startNetworkReachabilityObserver()
}

ネットワークステータスの変更が通知されます。ケーキのアイシングのためだけに this は、インターネット接続の損失を示す非常に良いアニメーションです。

7
Ammad

Appleは、可能な場合はクラスの代わりに構造体を使用すると言います。 @rmooneyと@Ammadの私のバージョンはここにありますが、クラスの代わりに構造体を使用しています。さらに、メソッドや関数を使用する代わりに、計算されたプロパティを使用しています。このアイデアは、@ Abhimuralidharanによる post から得られました。クラスの代わりに構造体を使用するという考え(シングルトンが必要ないため)と、メソッド呼び出しの代わりに計算されたプロパティを1つのソリューションで一緒に使用するだけです。

NetworkState構造体は次のとおりです。

import Foundation
import Alamofire

struct NetworkState {

    var isConnected: Bool {
        // isReachable checks for wwan, ethernet, and wifi, if
        // you only want 1 or 2 of these, the change the .isReachable
        // at the end to one of the other options.
        return NetworkReachabilityManager(Host: www.Apple.com)!.isReachable
    }
}

コードでの使用方法は次のとおりです。

if NetworkState().isConnected {
    // do your is Connected stuff here
}
1
jonathan3087

Swift 5

NetworkState構造

import Foundation
import Alamofire

struct NetworkState {

    var isInternetAvailable:Bool
    {
        return NetworkReachabilityManager()!.isReachable
    }
}

使用:-

  if (NetworkState().isInternetAvailable) {
        // Your code here
   }
1
Lakhdeep Singh