কীভাবে সুইফটে এসসি নেটওয়ার্কআরচাবিলিটি ব্যবহার করবেন


99

আমি এই কোড স্নিপেটকে সুইফটে রূপান্তর করার চেষ্টা করছি । কিছু অসুবিধার কারণে আমি মাটিতে নামতে লড়াই করছি।

- (BOOL) connectedToNetwork
{
    // Create zero addy
    struct sockaddr_in zeroAddress;
    bzero(&zeroAddress, sizeof(zeroAddress));
    zeroAddress.sin_len = sizeof(zeroAddress);
    zeroAddress.sin_family = AF_INET;

    // Recover reachability flags
    SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress);
    SCNetworkReachabilityFlags flags;

    BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);
    CFRelease(defaultRouteReachability);

    if (!didRetrieveFlags)
    {
        return NO;
    }

    BOOL isReachable = flags & kSCNetworkFlagsReachable;
    BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired;

    return (isReachable && !needsConnection) ? YES : NO;
}

আমার প্রথম এবং প্রধান সমস্যাটি হ'ল সি স্ট্রাক্টগুলি কীভাবে সংজ্ঞায়িত করা যায় এবং কীভাবে কাজ করা যায় তা নিয়ে। struct sockaddr_in zeroAddress;উপরের কোডের প্রথম লাইনে ( ), আমি মনে করি তারা zeroAddressস্ট্রাক্ট সোকাড্ডার_ইন (?) থেকে ডাকা একটি উদাহরণ সংজ্ঞায়িত করছে , আমি ধরে নিই। আমি এ জাতীয় ঘোষণা করার চেষ্টা করেছি var

var zeroAddress = sockaddr_in()

কিন্তু আমি কলটিতে প্যারামিটার 'sin_len' এর জন্য ত্রুটি অনুপস্থিত পেয়েছি যা বোধগম্য কারণ কারণ স্ট্রাক্টটি বেশ কয়েকটি আর্গুমেন্ট নেয়। তাই আবার চেষ্টা করলাম।

var zeroAddress = sockaddr_in(sin_len: sizeof(zeroAddress), sin_family: AF_INET, sin_port: nil, sin_addr: nil, sin_zero: nil)

প্রত্যাশিত হিসাবে আমি তার নিজস্ব প্রাথমিক মানের মধ্যে ভেরিয়েবল ব্যবহার করা কিছু অন্য ত্রুটি পেতে । আমি সেই ত্রুটির কারণও বুঝতে পারি। সি-তে, তারা প্রথমে উদাহরণটি ঘোষণা করে এবং তারপরে পরামিতিগুলি পূরণ করে। আমি জানি যতদূর সুইফটে এটি সম্ভব নয়। সুতরাং আমি সত্যিই কি করতে হবে এই মুহুর্তে হারিয়ে গেছে।

আমি সুইফটে সি এপিআইয়ের সাথে আলাপচারিতার বিষয়ে অ্যাপলের অফিসিয়াল ডকুমেন্টটি পড়েছি তবে স্ট্রাক্টের সাথে কাজ করার কোনও উদাহরণ নেই।

কেউ কি আমাকে এখানে সাহায্য করতে পারেন? আমি সত্যিই এটি প্রশংসা করব।

ধন্যবাদ.


আপডেট: মার্টিনকে ধন্যবাদ আমি প্রাথমিক সমস্যার মধ্য দিয়ে যেতে পেরেছি। তবে তবুও সুইফট আমার পক্ষে সহজ করে দিচ্ছে না। আমি একাধিক নতুন ত্রুটি পাচ্ছি।

func connectedToNetwork() -> 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)

    var defaultRouteReachability: SCNetworkReachabilityRef = SCNetworkReachabilityCreateWithAddress(UnsafePointer<Void>, UnsafePointer<zeroAddress>) // 'zeroAddress' is not a type
    var flags = SCNetworkReachabilityFlags()

    let didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, UnsafeMutablePointer<flags>) // 'flags' is not a type
    defaultRouteReachability.dealloc(1) // 'SCNetworkReachabilityRef' does not have a member named 'dealloc'

    if didRetrieveFlags == false {
        return false
    }

    let isReachable: Bool = flags & kSCNetworkFlagsReachable // Cannot invoke '&' with an argument list of type '(@lvalue UInt32, Int)'
    let needsConnection: Bool = flags & kSCNetworkFlagsConnectionRequired // Cannot invoke '&' with an argument list of type '(@lvalue UInt32, Int)'

    return (isReachable && !needsConnection) ? true : false
}

সম্পাদনা 1: ঠিক আছে আমি এই লাইনটি এখানে পরিবর্তন করেছি,

var defaultRouteReachability: SCNetworkReachabilityRef = SCNetworkReachabilityCreateWithAddress(UnsafePointer<Void>(), &zeroAddress)

আমি এই লাইনে যে নতুন ত্রুটিটি পাচ্ছি তা হ'ল 'অনিরাপদ পয়েন্টার' 'সিএফএল্লোকেটর' তে রূপান্তরিত নয় । আপনি NULLসুইফটে কিভাবে পাস করবেন ?

এছাড়াও আমি এই লাইনটি পরিবর্তন করেছি এবং ত্রুটিটি এখন চলে গেছে।

let didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags)

সম্পাদনা 2: এই প্রশ্নটি nilদেখে আমি এই লাইনে পাস করেছি । কিন্তু সেই উত্তরটি এখানে উত্তরটির সাথে বৈপরীত্য । এটি বলেছে সুইফটে এর সমতুল্য নেই ।NULL

var defaultRouteReachability: SCNetworkReachabilityRef = SCNetworkReachabilityCreateWithAddress(nil, &zeroAddress)

যাইহোক আমি একটি নতুন ত্রুটি পেয়েছি 'sockaddr_in' উপরের লাইনে 'sockaddr' এর মত নয়


আমার যদি লাইনে ত্রুটি হচ্ছে! এসসিনেট ওয়ার্ক রিচ্যাবিলিটি গেটফ্লেগস (ডিফল্টরউউটরিচ্যাবিলিটি, এবং ফ্ল্যাগস) অর্থাৎ ইউনিারি অপারেটর! বুলিয়ান টাইপের অপারেন্ডে প্রয়োগ করা যাবে না। । । । সাহায্য করুন.
জিবক

উত্তর:


236

(এই উত্তরটি সুইফট ভাষায় পরিবর্তনের কারণে বারবার প্রসারিত হয়েছিল, যা এটিকে কিছুটা বিভ্রান্ত করেছিল I এটি।)

আপনি সুইফট ২.০ (এক্সকোড)) এ এটিই করবেন :

import SystemConfiguration

func connectedToNetwork() -> Bool {

    var zeroAddress = sockaddr_in()
    zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress))
    zeroAddress.sin_family = sa_family_t(AF_INET)

    guard let defaultRouteReachability = withUnsafePointer(&zeroAddress, {
        SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0))
    }) else {
        return false
    }

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

    let isReachable = flags.contains(.Reachable)
    let needsConnection = flags.contains(.ConnectionRequired)

    return (isReachable && !needsConnection)
}

ব্যাখ্যা:

  • সুইফট ১.২ (এক্সকোড .3.৩) হিসাবে, আমদানীকৃত সি স্ট্রাক্টগুলির সুইফটে একটি ডিফল্ট ইনিশিয়ালাইজার রয়েছে, যা স্ট্রাক্টের সমস্ত ক্ষেত্র শূন্যে শুরু করে, সুতরাং সকেটের ঠিকানা কাঠামোটি দিয়ে আরম্ভ করা যায়

    var zeroAddress = sockaddr_in()
    
  • sizeofValue()দেয় এই কাঠামো আকার, এই রূপান্তরিত করা হয়েছে UInt8জন্য sin_len:

    zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress))
    
  • AF_INETএটি একটি Int32, এটির জন্য সঠিক ধরণের রূপান্তর করতে হবে sin_family:

    zeroAddress.sin_family = sa_family_t(AF_INET)
    
  • withUnsafePointer(&zeroAddress) { ... }কাঠামোর ঠিকানাটি বন্ধ হয়ে যায় যেখানে এটি যুক্তি হিসাবে ব্যবহৃত হয় SCNetworkReachabilityCreateWithAddress()UnsafePointer($0) রূপান্তর প্রয়োজন কারণ যে ফাংশন একটি পয়েন্টার আশা করা হয় sockaddr, না sockaddr_in

  • যে মানটি থেকে ফিরে এসেছে withUnsafePointer()তা হ'ল প্রত্যাবর্তন মান SCNetworkReachabilityCreateWithAddress()এবং এটির ধরণ রয়েছে SCNetworkReachability?, অর্থাত এটি optionচ্ছিক। guard letবিবৃতি (সুইফট 2.0 একটি নতুন বৈশিষ্ট্য) এর মোড়ানো মান নির্ধারণ defaultRouteReachabilityপরিবর্তনশীল যদি না হয় তাহলে nil। অন্যথায় elseব্লকটি কার্যকর করা হয় এবং ফাংশনটি ফিরে আসে।

  • সুইফট 2 হিসাবে, SCNetworkReachabilityCreateWithAddress()একটি পরিচালিত অবজেক্ট ফেরত দেয়। আপনাকে এটি স্পষ্টভাবে প্রকাশ করতে হবে না।
  • সুইফট 2 হিসাবে, SCNetworkReachabilityFlagsকে কনর্ফাম করে OptionSetTypeযা সেট মত ইন্টারফেস আছে। আপনি এর সাথে একটি খালি পতাকা ভেরিয়েবল তৈরি করুন

    var flags : SCNetworkReachabilityFlags = []
    

    এবং সঙ্গে পতাকা জন্য চেক

    let isReachable = flags.contains(.Reachable)
    let needsConnection = flags.contains(.ConnectionRequired)
    
  • এর দ্বিতীয় প্যারামিটারে SCNetworkReachabilityGetFlagsটাইপ রয়েছে UnsafeMutablePointer<SCNetworkReachabilityFlags>, যার অর্থ আপনাকে পতাকাগুলির পরিবর্তনশীলের ঠিকানাটি পাস করতে হবে ।

এও নোট করুন যে একটি বিজ্ঞপ্তি কলব্যাক নিবন্ধন করা সুইফট 2 হিসাবে সম্ভব, সুইফট এবং সুইফট 2 - অনিরাপদ পরিবর্তনযোগ্য পয়েন্টার <ভয়েড> অবজেক্টের সি সি এর সাথে কাজ করার তুলনা করুন ।


সুইফট 3/4 এর জন্য আপডেট:

অনিরাপদ পয়েন্টারগুলিকে আর কোনও ভিন্ন ধরণের পয়েন্টারে কেবল রূপান্তরিত করা যায় না (দেখুন - এসই -0107 অনিরাপদ রউপয়েন্টার এপিআই )। এখানে আপডেট করা কোড:

import SystemConfiguration

func connectedToNetwork() -> Bool {

    var zeroAddress = sockaddr_in()
    zeroAddress.sin_len = UInt8(MemoryLayout<sockaddr_in>.size)
    zeroAddress.sin_family = sa_family_t(AF_INET)

    guard let defaultRouteReachability = withUnsafePointer(to: &zeroAddress, {
        $0.withMemoryRebound(to: sockaddr.self, capacity: 1) {
            SCNetworkReachabilityCreateWithAddress(nil, $0)
        }
    }) else {
        return false
    }

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

    let isReachable = flags.contains(.reachable)
    let needsConnection = flags.contains(.connectionRequired)

    return (isReachable && !needsConnection)
}

4
@ ইসুরু: অসুরক্ষিত পয়েন্টার হ'ল সি পয়েন্টারের সমতুল্য সুইফট। আর্গুমেন্টের ঠিকানার সাথে withUnsafePointer(&zeroAddress)নিম্নলিখিত ক্লোজারটিকে কল করে । বন্ধের ভিতরে, সেই যুক্তিটির জন্য দাঁড়িয়ে। - দুঃখিত, কয়েকটি বাক্যে সেগুলি ব্যাখ্যা করা অসম্ভব। সুইফট বইয়ের ক্লোজারগুলি সম্পর্কে ডকুমেন্টেশনগুলি একবার দেখুন। $ 0 একটি "শর্টহ্যান্ড আর্গুমেন্ট নাম"। { ...}zeroAddress$0
মার্টিন আর

4
@ জাল: আপনি ঠিক বলেছেন, অ্যাপল কীভাবে সুইফটে "বুলিয়ান" ম্যাপ করা হয়েছে তা বদলেছে। আপনার মতামতের জন্য ধন্যবাদ, আমি সেই অনুযায়ী উত্তর আপডেট করব।
মার্টিন আর

4
trueওয়াইফাই সংযুক্ত না থাকলে এবং 4 জি চালু থাকলে এটি ফিরে আসে তবে ব্যবহারকারী নির্দিষ্ট করে দিয়েছে যে অ্যাপটি সেলুলার ডেটা ব্যবহার না করে .. কোনও সমাধান?
সর্বোচ্চ চুকিমিয়া

5
@ জুগালে: আপনি এমন কিছু করতে পারেন: let cellular = flags.contains(.IsWWAN) আপনি বুলিয়ানের পরিবর্তে দ্বিগুণ ফিরে আসতে পারেন, যেমন: func connectedToNetwork() -> (connected: Bool, cellular: Bool)
এডফুনক

4
@ তেজাস: আপনি "শূন্য ঠিকানা" এর পরিবর্তে যে কোনও আইপি ঠিকানা ব্যবহার করতে পারেন, বা হোস্টের নামের সাথে স্ট্রিং হিসাবে এসসিনেটওয়ার্কআরচাবিলিটি ক্রিয়েট উইথনাম () ব্যবহার করতে পারেন। তবে নোট করুন যে এসসিনেটওয়ার্কআরচাবিলিটিটি কেবলমাত্র সেই ঠিকানায় প্রেরিত কোনও প্যাকেট স্থানীয় ডিভাইসটি ছেড়ে যেতে পারে তা পরীক্ষা করে। এটি কোনও গ্যারান্টি দেয় না যে ডেটা প্যাকেটটি আসলে হোস্ট দ্বারা প্রাপ্ত হবে।
মার্টিন আর

12

সুইফট 3, আইপিভি 4, আইপিভি 6

মার্টিন আর এর উত্তরের ভিত্তিতে:

import SystemConfiguration

func isConnectedToNetwork() -> Bool {
    guard let flags = getFlags() else { return false }
    let isReachable = flags.contains(.reachable)
    let needsConnection = flags.contains(.connectionRequired)
    return (isReachable && !needsConnection)
}

func getFlags() -> SCNetworkReachabilityFlags? {
    guard let reachability = ipv4Reachability() ?? ipv6Reachability() else {
        return nil
    }
    var flags = SCNetworkReachabilityFlags()
    if !SCNetworkReachabilityGetFlags(reachability, &flags) {
        return nil
    }
    return flags
}

func ipv6Reachability() -> SCNetworkReachability? {
    var zeroAddress = sockaddr_in6()
    zeroAddress.sin6_len = UInt8(MemoryLayout<sockaddr_in>.size)
    zeroAddress.sin6_family = sa_family_t(AF_INET6)

    return withUnsafePointer(to: &zeroAddress, {
        $0.withMemoryRebound(to: sockaddr.self, capacity: 1) {
            SCNetworkReachabilityCreateWithAddress(nil, $0)
        }
    })
}

func ipv4Reachability() -> SCNetworkReachability? {
    var zeroAddress = sockaddr_in()
    zeroAddress.sin_len = UInt8(MemoryLayout<sockaddr_in>.size)
    zeroAddress.sin_family = sa_family_t(AF_INET)

    return withUnsafePointer(to: &zeroAddress, {
        $0.withMemoryRebound(to: sockaddr.self, capacity: 1) {
            SCNetworkReachabilityCreateWithAddress(nil, $0)
        }
    })
}

4
নেট 64 / আইপিভি 6 এর জন্যও আমার পক্ষে সর্বোত্তম উপায়ে কাজ করা, ভুলবেন নাimport SystemConfiguration
ভাভিন_মি

@ জুয়ানজো, আপনি কীভাবে একটি হোস্ট সেট করবেন যে আপনি নিজের কোড ব্যবহার করে পৌঁছাতে চান
ব্যবহারকারী 29242422

6

এর সাথে সুইফ্টের কোনও যোগসূত্র নেই, তবে সর্বোত্তম সমাধানটি নেটওয়ার্কটি অনলাইনে রয়েছে কিনা তা নির্ধারণের জন্য পুনঃচঞ্চলতা না ব্যবহার করা। আপনার সংযোগটি তৈরি করুন এবং যদি এটি ব্যর্থ হয় তবে ত্রুটিগুলি পরিচালনা করুন। সংযোগ তৈরি করা অনেক সময় সুপ্ত অফলাইন রেডিওগুলিকে জ্বালিয়ে দিতে পারে।

যখন কোনও নেটওয়ার্ক অফলাইন থেকে অনলাইনে স্থানান্তরিত হয় তখন আপনাকে অবহিত করার জন্য রিচাবিলিটির একটি বৈধ ব্যবহার। সেই সময়ে আপনার ব্যর্থ সংযোগগুলি আবার চেষ্টা করা উচিত।



তবু বগি। কেবল সংযোগ করুন এবং ত্রুটিগুলি পরিচালনা করুন handle দেখুন openradar.me/21581686 এবং mail-archive.com/macnetworkprog@lists.apple.com/msg00200.html এবং এখানে প্রথম মন্তব্য mikeash.com/pyblog/friday-qa-2013-06-14-reachability.html
EricS

আমি এটি পাই না - আপনি বড় আপলোড দেওয়ার চেষ্টা করার আগে আপনি ওয়াইফাই বা 3 জি তে ছিলেন কিনা তা জানতে চাইবেন না?
ডাম্বলডেড

4
Orতিহাসিকভাবে, রেডিওগুলি চালিত হলে পুনঃব্যবস্থাপনা কাজ করে না। আমি এটি আইওএস 9 এর আধুনিক ডিভাইসগুলিতে পরীক্ষা করে দেখিনি, তবে আমি গ্যারান্টি দিচ্ছি যে এটি যখন iOS এর পূর্ববর্তী সংস্করণগুলিতে আপলোড ব্যর্থতা ঘটায় তখন কেবল কোনও সংযোগ তৈরি করার সময় এটি ঠিকঠাক কাজ করত। আপনি যদি কেবলমাত্র ওয়াইফাই দিয়ে কোনও আপলোড চান তবে আপনার NSURLSessionসাথে API টি ব্যবহার করা উচিত NSURLSessionConfiguration.allowsCellularAccess = false
এরিকস

3

সবচেয়ে ভালো সমাধান ব্যবহার করা ReachabilitySwift বর্গ , লেখা Swift 2, এবং ব্যবহার SCNetworkReachabilityRef

সহজ এবং সহজ:

let reachability = Reachability.reachabilityForInternetConnection()

reachability?.whenReachable = { reachability in
    // keep in mind this is called on a background thread
    // and if you are updating the UI it needs to happen
    // on the main thread, like this:
    dispatch_async(dispatch_get_main_queue()) {
        if reachability.isReachableViaWiFi() {
            print("Reachable via WiFi")
        } else {
            print("Reachable via Cellular")
        }
    }
}
reachability?.whenUnreachable = { reachability in
    // keep in mind this is called on a background thread
    // and if you are updating the UI it needs to happen
    // on the main thread, like this:
    dispatch_async(dispatch_get_main_queue()) {
        print("Not reachable")
    }
}

reachability?.startNotifier()

কবজির মতো কাজ করা।

উপভোগ করুন


7
আমি গ্রহণযোগ্য উত্তর পছন্দ করি কারণ এটিতে কোনও তৃতীয় পক্ষের নির্ভরতা একীকরণের প্রয়োজন হয় না। SCNetworkReachabilityতদ্ব্যতীত, এটি কীভাবে সুইফটে ক্লাস ব্যবহার করবেন সে প্রশ্নের প্রশ্নের উত্তর দেয় না , এটি কোনও বৈধ নেটওয়ার্ক সংযোগের জন্য পরীক্ষা করার জন্য ব্যবহারের নির্ভরতার পরামর্শ sugges
জাল

1

সিঙ্গেলটন দৃষ্টান্ত তৈরি করতে জুঞ্জোর উত্তর আপডেট হয়েছে

import Foundation
import SystemConfiguration

final class Reachability {

    private init () {}
    class var shared: Reachability {
        struct Static {
            static let instance: Reachability = Reachability()
        }
        return Static.instance
    }

    func isConnectedToNetwork() -> Bool {
        guard let flags = getFlags() else { return false }
        let isReachable = flags.contains(.reachable)
        let needsConnection = flags.contains(.connectionRequired)
        return (isReachable && !needsConnection)
    }

    private func getFlags() -> SCNetworkReachabilityFlags? {
        guard let reachability = ipv4Reachability() ?? ipv6Reachability() else {
            return nil
        }
        var flags = SCNetworkReachabilityFlags()
        if !SCNetworkReachabilityGetFlags(reachability, &flags) {
            return nil
        }
        return flags
    }

    private func ipv6Reachability() -> SCNetworkReachability? {
        var zeroAddress = sockaddr_in6()
        zeroAddress.sin6_len = UInt8(MemoryLayout<sockaddr_in>.size)
        zeroAddress.sin6_family = sa_family_t(AF_INET6)

        return withUnsafePointer(to: &zeroAddress, {
            $0.withMemoryRebound(to: sockaddr.self, capacity: 1) {
                SCNetworkReachabilityCreateWithAddress(nil, $0)
            }
        })
    }
    private func ipv4Reachability() -> SCNetworkReachability? {
        var zeroAddress = sockaddr_in()
        zeroAddress.sin_len = UInt8(MemoryLayout<sockaddr_in>.size)
        zeroAddress.sin_family = sa_family_t(AF_INET)

        return withUnsafePointer(to: &zeroAddress, {
            $0.withMemoryRebound(to: sockaddr.self, capacity: 1) {
                SCNetworkReachabilityCreateWithAddress(nil, $0)
            }
        })
    }
}

ব্যবহার

if Reachability.shared.isConnectedToNetwork(){

}

1

এটি সুইফট ৪.০ এ in

আমি এই কাঠামো ব্যবহার করছি https://github.com/ashleymills/Reachability.swift
আর শুঁটি ইনস্টল করুন ..
সালে AppDelegate

var window: UIWindow?
var reachability = InternetReachability()!
var reachabilityViewController : UIViewController? = nil

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    reachabilityChecking()
    return true
}

extension AppDelegate {

func reachabilityChecking() {    
    reachability.whenReachable = { reachability in
        DispatchQueue.main.async {
            print("Internet is OK!")
            if reachability.connection != .none && self.reachabilityViewController != nil {

            }
        }
    }
    reachability.whenUnreachable = { _ in
        DispatchQueue.main.async {
            print("Internet connection FAILED!")
            let storyboard = UIStoryboard(name: "Reachability", bundle: Bundle.main)
            self.reachabilityViewController = storyboard.instantiateViewController(withIdentifier: "ReachabilityViewController")
            let rootVC = self.window?.rootViewController
            rootVC?.present(self.reachabilityViewController!, animated: true, completion: nil)
        }
    }
    do {
        try reachability.startNotifier()
    } catch {
        print("Could not start notifier")
    }
}
}

ইন্টারনেট না থাকলে রিচাবিলিটিভিউকন্ট্রোলার স্ক্রিনটি উপস্থিত হবে


0

সুইফট 5, ব্যবহার করে NWPathMonitor

import Network

func configureNetworkMonitor(){
        let monitor = NWPathMonitor()
        
        monitor.pathUpdateHandler = { path in
            
            if path.status != .satisfied {
                print("not connected")
            }
            else if path.usesInterfaceType(.cellular) {
                print("Cellular")
            }
            else if path.usesInterfaceType(.wifi) {
                print("WIFI")
            }
            else if path.usesInterfaceType(.wiredEthernet) {
                print("Ethernet")
            }
            else if path.usesInterfaceType(.other){
                print("Other")
            }else if path.usesInterfaceType(.loopback){
                print("Loop Back")
            }
        }
        
        monitor.start(queue: DispatchQueue.global(qos: .background))
    }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.