Suivi de l'utilisation des données iPhone

Quelqu'un peut-il m'aider s'il vous plaît comment je peux get l'utilisation des données de WWAN et WLAN avec Swift?

J'ai trouvé sur Stack Overflow comment faire ça en Objective-C mais une explication serait bien!

Voici comment faire cela en Objective-C .

Voici une implémentation possible.

Commencez par inclure ifaddrs dans votre en-tête de pontage Objective-C:

 #include <ifaddrs.h> 

Ensuite, essayez cette fonction:

 func getDataUsage() -> (wifi : (sent : UInt32, received : UInt32), wwan : (sent : UInt32, received : UInt32)) { var interfaceAddresses : UnsafeMutablePointer<ifaddrs> = nil var networkData: UnsafeMutablePointer<if_data> = nil var returnTuple : (wifi : (sent : UInt32, received : UInt32), wwan : (sent : UInt32, received : UInt32)) = ((0, 0), (0, 0)) if getifaddrs(&interfaceAddresses) == 0 { for var pointer = interfaceAddresses; pointer != nil; pointer = pointer.memory.ifa_next { let name : Ssortingng! = Ssortingng.fromCSsortingng(pointer.memory.ifa_name) println(name); let flags = Int32(pointer.memory.ifa_flags) var addr = pointer.memory.ifa_addr.memory if addr.sa_family == UInt8(AF_LINK) { if name.hasPrefix("en") { networkData = unsafeBitCast(pointer.memory.ifa_data, UnsafeMutablePointer<if_data>.self) returnTuple.wifi.sent += networkData.memory.ifi_obytes returnTuple.wifi.received += networkData.memory.ifi_ibytes } else if name.hasPrefix("pdp_ip") { networkData = unsafeBitCast(pointer.memory.ifa_data, UnsafeMutablePointer<if_data>.self) returnTuple.wwan.sent += networkData.memory.ifi_obytes returnTuple.wwan.received += networkData.memory.ifi_ibytes } } } freeifaddrs(interfaceAddresses) } return returnTuple } 

Il renvoie des tuples Swift nesteds représentant les quatre éléments de données que vous avez demandés. Cela le rend facile d'access. Par exemple:

 let usage = getDataUsage() let wifiDataSentSsortingng = "WiFi Data Sent: \(usage.wifi.sent)" 

Mise à jour @Aaron Brager réponse pour Swift 4 et Xcode 9.

 func getDataUsage() -> (wifi : (sent : UInt32, received : UInt32), wwan : (sent : UInt32, received : UInt32)) { var interfaceAddresses : UnsafeMutablePointer<ifaddrs>? = nil var networkData: UnsafeMutablePointer<if_data>? = nil var pointer: UnsafeMutablePointer<ifaddrs>? = nil var returnTuple : (wifi : (sent : UInt32, received : UInt32), wwan : (sent : UInt32, received : UInt32)) = ((0, 0), (0, 0)) if getifaddrs(&interfaceAddresses) == 0 { pointer = interfaceAddresses while pointer != nil { let name : Ssortingng = Ssortingng.init(validatingUTF8: pointer!.pointee.ifa_name)! let flags = UInt32((pointer?.pointee.ifa_flags)!)//Int32(pointer?.pointee.ifa_flags) let addr = pointer?.pointee.ifa_addr.pointee if addr?.sa_family == UInt8(AF_LINK) { if name.hasPrefix("en") { networkData = unsafeBitCast(pointer?.pointee.ifa_data, to: UnsafeMutablePointer<if_data>.self) returnTuple.wifi.sent += (networkData?.pointee.ifi_obytes)! returnTuple.wifi.received += (networkData?.pointee.ifi_ibytes)! } else if name.hasPrefix("pdp_ip") { networkData = unsafeBitCast(pointer?.pointee.ifa_data, to: UnsafeMutablePointer<if_data>.self) returnTuple.wwan.sent += (networkData?.pointee.ifi_obytes)! returnTuple.wwan.received += (networkData?.pointee.ifi_ibytes)! } } pointer = pointer?.pointee.ifa_next } } freeifaddrs(interfaceAddresses) return returnTuple }