【问题标题】:Assigning value of an item in an array gives Bound value in a conditional binding must be an Optional type为数组中的项目赋值给条件绑定中的绑定值必须是可选类型
【发布时间】:2014-06-04 01:55:42
【问题描述】:

我得到一个编译错误说

Bound value in a conditional binding must be an Optional type

下面是代码截图

【问题讨论】:

  • 请在此处发布您的代码,而不是屏幕截图

标签: swift


【解决方案1】:

您可以像这样将 array[index] 的值转换为 Optional:

if let value = Int?(array[index]){
    result += value
}

如果你的数组包含 Ints。你也可以使用 AnyObject?,但你会收到来自 xcode 的警告。

【讨论】:

    【解决方案2】:

    array应该声明为Optional type,以Int?[]为例,

    let array:Int?[] = [nil, 2, 3]
    let index = 0
    let count = array.count
    
    for index in 0..count {
        if let value = array[index] {
            println(value)
        } else {
            println("no value")
        }
    }
    

    【讨论】:

      【解决方案3】:

      如果 array[index] 的值的类型是可选的,你可以简单地这样做:

      if let value = array[index]{
       result += value
      }
      

      【讨论】:

        【解决方案4】:

        在这种情况下,编译器会抱怨,因为数组 不是 可选(可为零)类型的集合。如果确实不需要,那么您实际上并不需要 if,因为数组中的所有内容都保证是相同的类型,并且 if 语句不会保护您免受无论如何 -bounds 错误。所以就去吧:

        while ++index < length {
            result += array[index]
        }
        

        或者更好:

        for value in array {
            result += value
        }
        

        甚至更好:

        result = array.reduce(0) { $0 + $1 }
        

        【讨论】:

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