【问题标题】:Binary operator '>' cannot be applied to operands of type '(String?)' and 'String?'二元运算符“>”不能应用于“(字符串?)”和“字符串?”类型的操作数
【发布时间】:2015-09-10 14:02:14
【问题描述】:

二元运算符'>'不能应用于'(String?)'和'String?'类型的操作数

if (dictionary["firstKey"] as? String) > coreDataObject?.objectID as? String {

}

'(String?)' 是什么类型?

【问题讨论】:

  • 可选字符串。哪个应该很明显,因为你用过?而不是作为。如果其中一个对象实际上不是字符串,你必须弄清楚你想要做什么。
  • 但是为什么我看到一个带括号的可选字符串?
  • 在 Swift 中,if-statements 不需要在条件周围加上括号。通过将它们放在那里,您定义了一个具有单个元素的元组。
  • @MariusSchulz 括号可用于在 Swift 中对条件表达式和子表达式进行分组。以这种方式使用括号不会定义元组。

标签: swift


【解决方案1】:

正如 Cristian 指出的那样,您有 2 个选项,但它们不起作用。

至于为什么错误报告类型“(String?)”,看起来编译器认为您的 if 语句的第一部分是创建一个元组而不是定义操作顺序。这是我在 Swift 中不太清楚的一点——括号什么时候定义一个元组,什么时候只确定运算符的优先级?

试试这个:

if let firstKeyValue = dictionary["firstKey"] as String,
  let objectID = coreDataObject?.objectID as String
{
  if firstKeyValue > objectID
  {
     //your code here
  }
}
else
{
  //Error. Could not convert data to strings
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-04
    • 2020-04-30
    • 2017-02-13
    • 1970-01-01
    • 2016-06-30
    • 2015-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多