Не удается преобразовать тип результата вызова '_?' к ожидаемому типу '[UInt]'

self.mapper.identityIdsForQuickbloxUserIds(userIDs.map{($0 as! NSNumber).unsignedLongValue}, completion: { identityIdsMapping, error in

Не удается преобразовать тип результата вызова '_?' к ожидаемому типу '[UInt]'

userIDs is NSSet

а вот функция:

func identityIdsForQuickbloxUserIds(userIds:[UInt], completion:(identityIdsMapping:[UInt: String]?, error:NSError?) -> Void)

как его правильно конвертировать?

Это внешняя функция, которая возвращает мне этот набор:

- (void)allDialogsWithPageLimit:(NSUInteger)limit
                extendedRequest:(QB_NULLABLE NSDictionary *)extendedRequest
                 iterationBlock:(void(^QB_NULLABLE_S )(QBResponse *QB_NONNULL_S response, NSArray QB_GENERIC(QBChatDialog *) *QB_NULLABLE_S dialogObjects, NSSet QB_GENERIC(NSNumber *) * QB_NULLABLE_S dialogsUsersIDs, BOOL * QB_NONNULL_S stop))iterationBlock
                     completion:(void(^QB_NULLABLE_S)(QBResponse * QB_NONNULL_S response))completion;

Как видите, мы получили этот NSSet отсюда:

NSSet QB_GENERIC(NSNumber *) * QB_NULLABLE_S dialogsUsersIDs

этот метод взят из QuickBlox SDK


person Matrosov Alexander    schedule 19.04.2016    source источник
comment
Я пробовал это, пусть userIds = NSSet(objects: 1, 2, 3).map{($0 as! NSNumber).unsignedLongValue} и работает нормально. Вы уверены, что не пытаетесь сопоставить объект? Если да, то $0 не сработает.   -  person brduca    schedule 19.04.2016
comment
Проблема не ясна в том, что вы опубликовали, нужно больше деталей. Возможно, изолируйте метод карты, чтобы подтвердить, что проблема возникает там. И дважды проверьте, что данные в вашем NSSet могут быть преобразованы в NSNumber, я подозреваю, что проблема в этом.   -  person Craig Grummitt    schedule 19.04.2016


Ответы (2)


Пример 1:

Вот простой пример:

    identityIdsForQuickbloxUserIds([1,2,3]) { dictionary, error in


    }

Пример 2:

    let x = NSSet(array: [1, 2, 3]).map { $0 as! UInt }

    identityIdsForQuickbloxUserIds(x) { dictionary, error in


    }
person user1046037    schedule 19.04.2016
comment
извините, трудно понять ваш вопрос. Какой кусок кода выдает ошибку? Вставьте ошибку и весь соответствующий код (только самый минимум), чтобы можно было запустить и протестировать ее. - person user1046037; 04.05.2016

userIDs является необязательным Set<NSNumber>?, а не Set<NSNumber>, поэтому вам нужно развернуть его, если сначала что-то вроде этого

var ids = userIDs?.map { $0.unsignedLongValue } ?? [UInt]()

...

identityIdsForQuickbloxUserIds(ids, ...)
person Maxim Kosov    schedule 04.05.2016
comment
Имеет смысл. @Матросов Александр, не могли бы вы вставить декларацию userIDs - person user1046037; 04.05.2016