Прежде чем углубляться в детали, позвольте мне рассказать вам все это - да, я рассмотрел все возможные решения, предоставляемые в Stack-Overflow.
Постановка проблемы: Я не могу прочитать 'CarrierName' моей доступной SIM-карты, используя iPhone
Что я пытался: Я пробовал два разных решения, но не могу прочитать CarrierName.
Решение 1: Когда я пробовал это решение, я получил только "Перевозчик" в качестве вывода вместо CarrierName.
Решение 1:
//--------------- CodeBase : Solution1 -----------------
let networkInfo = CTTelephonyNetworkInfo()
let carrier = networkInfo.serviceSubscriberCellularProviders?.first?.value
if let carrierName = carrier?.carrierName {
cell.textLabel?.text = carrierName
}
else{
cell.textLabel?.text = "No Data"
}
//-------------------------------------------------------
Выход: Перевозчик
Решение 2: Когда я попробовал это решение Я получил "iPhone X" в качестве вывода, вместо CarrierName.
Решение 2:
//--------------- CodeBase : Solution2 -----------------
let networkInfo = CTTelephonyNetworkInfo()
let carrier = networkInfo.serviceSubscriberCellularProviders?.first?.value
if var carrierName = carrier?.carrierName {
if carrierName.contains("Carrier"){
carrierName = self.getCarrierName() ?? "No Data"
}
else{
cell.textLabel?.text = carrierName
}
}
else{
cell.textLabel?.text = "No Data"
}
//-------------------------------------------------------
Fun c: getCarrierName ()
//--------------- CodeBase : Part of Solution2 -----------------
func getCarrierName() -> String? {
var carrierName: String?
let typeName: (Any) -> String = { String(describing: type(of: $0)) }
let statusBar = UIApplication.shared.value(forKey: "_statusBar") as! UIView
for statusBarForegroundView in statusBar.subviews {
if typeName(statusBarForegroundView) == "UIStatusBarForegroundView" {
for statusBarItem in statusBarForegroundView.subviews {
if typeName(statusBarItem) == "UIStatusBarServiceItemView" {
carrierName = (statusBarItem.value(forKey: "_serviceString") as! String)
}
}
}
}
return carrierName
}
//-------------------------------------------------------
Вывод: iPhone X, т. Е. Он возвращает ModelName вместо CarrierName
Может кто-нибудь, пожалуйста, помогите мне получить CarrierName.