Как я могу привести к Int объект из уведомления userInfo? - PullRequest
0 голосов
/ 01 июня 2019

Я пытаюсь проанализировать ключ gcm.notification.createdAt, но его значение не приводится как Int. Как ни странно, он не работает, хотя тип значения явно Int, как вы можете видеть. Есть идеи, что я здесь делаю не так?

userInfo is [AnyHashable("gcm.notification.chatUID"): -LgHYXKFNmP-mQo7s9nB, 
             AnyHashable("gcm.notification.type"): chat, 
             AnyHashable("gcm.notification.createdAt"): 1559389303, 
             AnyHashable("google.c.a.e"): 1, 
             AnyHashable("gcm.message_id"): 0:1559389316529351%e413fc3ee413fc3e, 
             AnyHashable("aps"): {
    alert =     {
        body = "You have a new message";
        title = "New Message from Lehz Raus";
    };
    badge = 1;
    sound = default;
}]

let userInfo =  response.notification.request.content.userInfo

guard let createdAt = userInfo["gcm.notification.createdAt"] as? Int else {
            print("gcm.notification.createdAt is not showing")
            return
           }

 //this works as expected
    guard let chatUUUUID = userInfo["gcm.notification.chatUID"] as? String else {
        print("no chatUUUUID printed")
        return
    }

1 Ответ

1 голос
/ 01 июня 2019

Я подозреваю, что ваша ценность на самом деле не Int.

Вы можете исследовать базовый тип, напечатав:

print(type(of: userInfo["gcm.notification.createdAt"]!))

Из комментариев вы сказали, что он вернулся: __NSCFString, поэтому сервер дает вам String. Вы можете преобразовать это в Int с помощью дополнительной строки в вашем guard выражении:

guard let createdAt = userInfo["gcm.notification.createdAt"] as? String,
      let createdAtInt = Int(createdAt) else {
    print("gcm.notification.createdAt is not showing")
    return
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...