【问题标题】:Cast from '()' to unrelated type 'String' always fails从“()”转换为不相关类型“字符串”总是失败
【发布时间】:2016-04-17 01:41:48
【问题描述】:

我正在尝试从完成块中单步执行 [AnyObject] 数组并将项目转换为字符串,以便我可以将它们放入 tableView 中。但是,当我尝试附加数组的各个值时,会出现此错误:Cast from '()' to unrelated type 'String' always fails。代码如下:

client.historyForChannel(ids, start: nil, end: nil, withCompletion: { (result, status) -> Void in

    if status == nil {
        if result!.data.messages.count > 0 {
            let historyMessages = result!.data.messages as? [String]
            for value in historyMessages!{
                self.messagesArray.append(value) as? String //error
            }
        }
    }
})

如果有帮助,我将使用 PubNub 在我的 Swift 应用程序中创建/存储消息。

谢谢!

【问题讨论】:

  • 你为什么把as? String放在append之后?
  • 您确定result!.data.messages 可以转换为[String] 吗?这可能是使用guard let 的好地方

标签: ios arrays swift swift2 pubnub


【解决方案1】:

你写的时候

self.messagesArray.append(value) as? String

你可能是说

self.messagesArray.append(value as? String)

虽然

self.messagesArray.append(value)

应该足够了,因为historyMessages 已经是[String]! 类型。

错误是说您正在将self.messagesArray.append(value)(即Void,因为append 不返回任何内容)的结果转换为String,这总是失败。

顺便说一句,您的代码使用的感叹号比应有的要多。您应该使用 guard-let 来确保您的变量不为零。

【讨论】:

  • historyMessages 已经是 [String],因此没有必要。
  • 你的代码使用的感叹号比它应该使用的多。 — 事实上,如果你的代码读起来像是你在大喊大叫,那是你在做的一个好兆头出了点问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-16
  • 1970-01-01
  • 2016-08-09
相关资源
最近更新 更多