【问题标题】:Downcast from only unwraps optionals; did you mean to use '!'?仅从展开选项向下转换;你的意思是使用'!'?
【发布时间】:2016-04-19 12:13:13
【问题描述】:

我遇到了这个奇怪的错误,不知道如何修复它。

guard let theDialogObjects = dialogObjects as! [QBChatDialog]

来自“[QBChatDialog]?”的失望到 '[QBChatDialog]' 只展开 选项;您的意思是使用“!”吗?

代码来自这里:https://github.com/QuickBlox/q-municate-services-ios/blob/master/QMChatService/QMChatService/QMChatService.m

- (void)allDialogsWithPageLimit:(NSUInteger)limit
                extendedRequest:(NSDictionary *)extendedRequest
                 iterationBlock:(void(^)(QBResponse *response, NSArray *dialogObjects, NSSet *dialogsUsersIDs, BOOL *stop))iterationBlock
                     completion:(void(^)(QBResponse *response))completion {

这就是我在 Swift 中使用它的方式:

QMServicesManager.instance().chatService.allDialogsWithPageLimit(UInt.max, extendedRequest: ["type":String(QBChatDialogType.Private.rawValue)], iterationBlock: { (response, dialogObjects, userIDs, stop) in

      guard let theDialogObjects = dialogObjects as! [QBChatDialog]{
        return
      }

【问题讨论】:

  • dialogObjects是什么类型的?
  • 只需尝试替换 '!'由“?”
  • @EvdzhanMustafa dialogObject is NSArray)
  • @Shameerjan 是的,我实际上有过吗?取而代之的是错误替换为!但我没有像上面的代码行那样替换它,它仍然是同样的错误
  • 如果您收到上述错误消息,dialogObjects 不能是 NSArray。你能提供最小的可预生产样品吗?

标签: swift swift2 swift2.2


【解决方案1】:

从错误消息中您没有尝试更改类型,只需检查该值不为零,因此您的检查应该是:

guard let theDialogObjects = dialogObjects else ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多