我有以下代码:
let networkStatus = CTTelephonyNetworkInfo()
func getCellularInfo() {
if #available(iOS 12.0, *) {
var info = networkStatus.serviceSubscriberCellularProviders
if let aKey = networkStatus.value(forKey: "serviceSubscriberCellularProvider") {
print("aKey: \(aKey)")
}
}
}
此代码返回:
aKey:{0000000100000001 =“CTCarrier(0x28282e610){\ n \ tCarrier名称:[Vodacom] \ n \ t移动国家代码:[655] \ n \ t移动网络代码:[01] \ n \ tISO国家代码:[za] \ n \ t允许VOIP?[YES] \ n} \ n“; }
我不熟悉这种方法,如何获得与键相关的值,例如\n\tMobile Country Code: [655]/n/
serviceSubscriberCellularProviders
上的属性CTTelephonyNetworkInfo
返回由String键入的CTCarrier
对象的字典。
var serviceSubscriberCellularProviders: [String : CTCarrier]?
您可以在声明的输出中看到:CTCarrier (0x28282e610) {...
。
你输出的代码不清楚,因为你发布的代码,语法正确,从不使用生成的info
字典变量。
所以使用正确的代码(假设serviceSubscriberCellularProvider
是关键):
let networkStatus = CTTelephonyNetworkInfo()
if let info = networkStatus.serviceSubscriberCellularProviders,
let carrier = info["serviceSubscriberCellularProvider"] {
//work with carrier object
print("MNC = \(carrier.mobileNetworkCode)")
}
但这似乎不适用于运行iOS 12.0.1的单个iPhone iPhone 7。 serviceSubscriberCellularProviders
是零。具有双SIM卡硬件的新手机可能会有不同的反应。
但是,已弃用的属性仍然有效。
let networkStatus = CTTelephonyNetworkInfo()
if let carrier = networkStatus.subscriberCellularProvider {
print("MNC = \(carrier.mobileNetworkCode ?? "NO CODE")")
}