You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS中如何获取standalone5G等具体5G网络连接类型?

如何获取iOS设备当前连接的具体5G网络类型?

你已经能通过NetworkReachability获取到基础的网络接口类型(蜂窝、WiFi等),但在尝试获取具体5G类型(独立组网SA、非独立组网NSA)时出现错误。错误代码的核心问题在于直接引用了NWInterface.RadioType.Cellular类型而非实际的接口实例,且switch语法存在占位符错误。

错误代码问题分析

你之前的错误代码:

if let networktype = NWInterface.RadioType.Cellular
{
    switch networktype
    {
    case .standalone5G(<#T##Network.NWInterface.RadioType.Cellular.NewRadio5GVariant#>):
        print("CDMA Network")
        default:
        print("Other")
    }
}

这里有两个关键问题:

  • NWInterface.RadioType.Cellular是枚举类型,不是可选值,不能用if let解包
  • switch case中的占位符未替换,且逻辑上没有获取当前设备实际的蜂窝网络radio类型

正确实现代码

要获取具体5G类型,需要先获取当前活跃的蜂窝网络接口,再读取其radioType属性。以下是两种场景的完整实现:

场景1:实时监听网络变化(适合动态更新需求)

import Network

func monitor5GNetworkType() {
    let monitor = NWPathMonitor()
    monitor.pathUpdateHandler = { path in
        // 遍历活跃接口,定位蜂窝网络
        for interface in path.availableInterfaces {
            guard interface.type == .cellular else { continue }
            
            guard let cellularRadioType = interface.radioType as? NWInterface.RadioType.Cellular else {
                print("无法获取蜂窝网络详细类型")
                return
            }
            
            switch cellularRadioType {
            case .standalone5G(let variant):
                print("当前为独立组网(SA)5G,版本:\(variant)")
            case .dualConnectivity5G(let variant):
                print("当前为非独立组网(NSA)5G,版本:\(variant)")
            case .lte, .edge, .gprs:
                print("当前为4G/2G蜂窝网络")
            default:
                print("其他蜂窝网络类型")
            }
            break
        }
    }
    let queue = DispatchQueue(label: "NetworkMonitorQueue")
    monitor.start(queue: queue)
}

场景2:获取当前时刻的网络类型(适合单次查询需求)

import Network

func getCurrentCellularRadioType() {
    let allInterfaces = NWInterface.allInterfaces
    for interface in allInterfaces {
        guard interface.type == .cellular else { continue }
        
        guard let cellularRadioType = interface.radioType as? NWInterface.RadioType.Cellular else {
            print("无法获取蜂窝网络详细类型")
            return
        }
        
        switch cellularRadioType {
        case .standalone5G(let variant):
            print("SA 5G - \(variant)")
        case .dualConnectivity5G(let variant):
            print("NSA 5G - \(variant)")
        default:
            print("当前为非5G蜂窝网络")
        }
    }
}

注意事项

  • 需iOS 14.0及以上版本,才支持NWInterface.RadioType.Cellular的5G相关枚举值
  • 项目需开启蜂窝网络权限:在Info.plist中添加NSCellularNetworkUsageDescription键并填写用途说明
  • 实时监听场景中,记得在不需要时调用monitor.cancel()停止监听,避免资源浪费

内容的提问来源于stack exchange,提问作者shirish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 00:09:23