2017-01-19 3 views
-2
let vals2: String? = String(describing: store?.data?.newsArticles?.count) 
print(vals2!) 
self.newsTabBarItem.badgeValue = vals2! 
self.menuList = (store?.data?.newsArticles)! 

Я получаю подсчет array и положить его в качестве badge значения, однако его показ в значок факультативным (5 для Исх., Как это может быть решена?избавиться от необязательных при печати знака

ответ

1
store?.data?.newsArticles?.count 

является optional, то

String(describing: store?.data?.newsArticles?.count) 

будет равен "Optional(3)" и ее тип будет String не String?. Вам нужно разворачивать count вместо vals2:

let newsArticles = store?.data?.newsArticles // newsArticles is an Optional 
let vals2: String = String(describing: newsArticles!.count) 
print(vals2) 
self.newsTabBarItem.badgeValue = vals2 
self.menuList = newsArticles! 

Еще лучше, если ваш код требует newsArticles:

if let newsArticles = store?.data?.newsArticles { // newsArticles won't be an Optional 
    let vals2 = String(describing: newsArticles.count) 
    print(vals2) 
    self.newsTabBarItem.badgeValue = vals2 
    self.menuList = newsArticles 
} 
0

Вы получаете свой Optional(n) в этот призыв:

String(describing: store?.data?.newsArticles?.count) 

Потому что вы» повторно запрашивая описание Optional<Int>.

Вы можете попробовать это:

let vals2: String? = store?.data?.newsArticles?.count.map { count in 
    String(describing: count) 
} 
self.newsTabBarItem.badgeValue = vals2 // don't use `!` here 
+0

я получил ошибку на карте, значение типа междунар нет карты члена –

+0

Вы можете взять скриншот вашего кода (часть с картой) с ошибкой? И убедитесь, что нет '?' После 'count':' .count.map', а не '.count? .map'. – user28434

Смежные вопросы