【问题标题】:Swift : Could not find an overload for '>' that accepts the supplied argumentsSwift:找不到接受提供的参数的“>”的重载
【发布时间】:2014-08-25 16:00:34
【问题描述】:

我知道这个问题已经用各种其他符号代替了我的例子中的“>”符号。但他们都没有解决我的问题。我需要做的是检查搜索字符串的长度是否大于2,如果是,则执行搜索。为此,我编写了以下if 条件:

if countElements(searchString) > 2 {}

其中 searchString 是一个 String 对象。但是这一行会产生错误:

Could not find an overload for '>' that accepts the supplied arguments

我发现 Swift 不会隐式转换值,所以我尝试了以下代码,

if Int(countElements(searchString)) > 2 {}

仍然导致同样的问题。这里有什么问题?

编辑

searchString 来自这个委托:

func searchDisplayController(controller: UISearchDisplayController!, shouldReloadTableForSearchString searchString: String!) -> Bool {

    if countElements(searchString) > 2
    {

    }
    return false
 }

【问题讨论】:

  • 你试过这个吗:if countElements(searchString) > Int(2) {}
  • 同样的问题。已经试过了

标签: if-statement swift conditional-operator


【解决方案1】:

问题不在于您在问题中包含的代码。如果您在操场上尝试以下操作,效果会很好:

var searchString = "foo"

if countElements(searchString) > 2 {
  println("It's a long string!")
}

您能否提供一个非常简单的示例来说明您的问题?

【讨论】:

  • 请看我的编辑。 searchString 来自委托
【解决方案2】:

我修好了。实际的问题是 swift 如何使用变量。在searchString 之后添加感叹号解决了这个问题。更正代码:

func searchDisplayController(controller: UISearchDisplayController!, shouldReloadTableForSearchString searchString: String!) -> Bool {

    if countElements(searchString!) > 2
    {

    }
    return false
}

【讨论】:

  • 嗯,其实并不奇怪。这就是 Swift 的工作方式。我们使用 !快速地说该值不为空,它肯定有一些价值。
  • 当它是一个隐式展开的可选时不是。为什么我们要强制解开已经隐式解包的东西?
  • 嗯.. 现在这令人困惑。
猜你喜欢
  • 1970-01-01
  • 2014-08-02
  • 1970-01-01
  • 1970-01-01
  • 2014-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多