CTTelephonyNetworkInfo возвращает ноль на iOS 12 - PullRequest
0 голосов
/ 30 октября 2018

У меня есть следующий код:

let networkStatus = CTTelephonyNetworkInfo()

func getCellularInfo() {
    if #available(iOS 12.0, *) {
        var info = networkStatus.serviceSubscriberCellularProviders
        if let aKey = networkStatus.value(forKey: "serviceSubscriberCellularProvider") {
            print("aKey: \(aKey)")
        }
    }
}

Этот код возвращает:

Ключ: { 0000000100000001 = "CTCarrier (0x28282e610) {\ n \ t Имя оператора: [Vodacom] \ n \ tМобильный код страны: [655] \ n \ tМобильный сетевой код: [01] \ n \ tISO Код страны: [za] \ n \ tAllows VOIP? [YES] \ n} \ n "; }

Я не знаком с этим методом, как мне получить значения, связанные с ключами, например \n\tMobile Country Code: [655]/n/

1 Ответ

0 голосов
/ 30 октября 2018

Свойство serviceSubscriberCellularProviders on CTTelephonyNetworkInfo возвращает словарь из CTCarrier объектов с ключом String.

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)")
}

Но, похоже, это не работает на iPhone 7 с одной SIM-картой под управлением iOS 12.0.1. serviceSubscriberCellularProviders ноль. Возможно, новые телефоны с двумя SIM-картами будут реагировать по-другому.

Однако устаревшее свойство все еще работает.

let networkStatus = CTTelephonyNetworkInfo()
if let carrier = networkStatus.subscriberCellularProvider {
    print("MNC = \(carrier.mobileNetworkCode ?? "NO CODE")")
}
...