• iOS 手机网络类型判断


    import Foundation
    import CoreTelephony
    
    /// 设备网络类型
    public enum NetworkType {
        case unknow, unconnect, wifi
        /// 手机网络
        case phone(NetPhoneType)
        
        /// 当前的连接网络类型
        var type: String {
            switch self {
            case .unknow:
                return "unknow"
            case .unconnect:
                return "unconnect"
            case .wifi:
                return "wifi"
            case .phone(let netPhoneType):
                return netPhoneType.rawValue
            }
        }
        
        /// 手机网络类型
        public enum NetPhoneType: String {
            case unknow = "unknow"
            case _2G = "2G"
            case _3G = "3G"
            case _4G = "4G"
            case _5G = "5G"
            
            static var type: NetPhoneType {
                return getNetPhoneType()
            }
        }
    }
    
    
    private extension NetworkType.NetPhoneType {
        /// 获取手机网络类型
        static func getNetPhoneType() -> NetworkType.NetPhoneType {
            let info = CTTelephonyNetworkInfo()
            
            var type: String
            if #available(iOS 12, *) {
                type = info.serviceCurrentRadioAccessTechnology?.values.first ?? ""
            } else {
                type = info.currentRadioAccessTechnology ?? ""
            }
            
            guard !type.isEmpty else {
                return .unknow
            }
            
            let _2gTypes = [CTRadioAccessTechnologyGPRS,
                            CTRadioAccessTechnologyEdge,
                            CTRadioAccessTechnologyCDMA1x]
            if _2gTypes.contains(type) {
                return ._2G
            }
            
            let _3gTypes = [CTRadioAccessTechnologyHSDPA,
                            CTRadioAccessTechnologyWCDMA,
                            CTRadioAccessTechnologyHSUPA,
                            CTRadioAccessTechnologyCDMAEVDORev0,
                            CTRadioAccessTechnologyCDMAEVDORevA,
                            CTRadioAccessTechnologyCDMAEVDORevB,
                            CTRadioAccessTechnologyeHRPD]
            if _3gTypes.contains(type) {
                return ._3G
            }
            
            let _4gTypes = [CTRadioAccessTechnologyLTE]
            if _4gTypes.contains(type) {
                return ._4G
            }
            
            if #available(iOS 14.1, *) {
                let _5gTypes = [CTRadioAccessTechnologyNR, CTRadioAccessTechnologyNRNSA]
                if _5gTypes.contains(type) {
                    return ._5G
                }
            }
            
            return .unknow
        }
    }
    

      

  • 相关阅读:
    【LOJ】#2888. 「APIO2015」巴邻旁之桥 Palembang Bridges
    【AtCoder】ARC099题解
    【LOJ】#2265. 「CTSC2017」最长上升子序列
    【LOJ】#2264. 「CTSC2017」吉夫特
    【AtCoder】AGC028 (A-E)题解
    【AtCoder】ARC100 题解
    【AtCoder】ARC101题解
    【AtCoder】AGC026 题解
    【LOJ】 #2308. 「APIO2017」商旅
    【BZOJ】3456: 城市规划(多项式求ln)
  • 原文地址:https://www.cnblogs.com/mustard22/p/15351919.html
Copyright © 2020-2023  润新知