【问题标题】:Cannot use optional chaining on non-optional value of type '[Int]'不能对“[Int]”类型的非可选值使用可选链接
【发布时间】:2018-03-07 19:48:46
【问题描述】:

我试图通过仅选择数组中的三个数字之一来让我的代码在 Swift 4 中打印“Hello World”,我得到了标题中列出的错误。

func newFunc() {
    let employees = [1, 2, 3]?
    if employees == [1] {
        let printthis = "Hello World!"
        print(printthis)
    } else {
        print("Nothing here")
    }
}

newFunc()

【问题讨论】:

  • 只需删除问号 ... 正如 Xcode 建议的 Fix-it
  • 您的if 声明永远不会正确,因为[1,2,3] 不等于[1]

标签: swift int func


【解决方案1】:

你不能申请“?”对象/实例的可选。您可以通过放置“?”将对象定义为 Optional关于类型:

let employees: [Int]? = [1, 2, 3]

你的员工数组现在将是一个可选 Int 数组。似乎您不需要可选选项,因此您可以跳过“?”来自定义

要检查数组是否包含值,您可以通过以下方式检查它:

if employees.contains(1) {
  let printthis = "Hello World!"
      print(printthis)
} else {
    print("Nothing here")
}

【讨论】:

    【解决方案2】:

    问题来了

    let employees = [1, 2, 3]?
    

    应该是这样的,你不能为那个声明附加?

    let employees = [1, 2, 3]
    

    【讨论】:

      【解决方案3】:

      代码

      let employees = [1, 2, 3]?
      

      不是有效的 Swift。

      如果你想创建一个可选的整数数组,使用

      let employees: [Int]? = [1, 2, 3]
      

      但是,您不太可能需要可选的 let 常量。最好去掉问号:

      let employees = [1, 2, 3]
      

      如果你真的希望员工是一个可选数组,并且你真的想把可选说明符放在声明的右侧,你可以这样做:

      let employees = Optional([1, 2, 3])
      

      但我还是不知道为什么你想要一个可选的let 常量作为实例变量。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-02-03
        • 2023-04-02
        • 1970-01-01
        • 1970-01-01
        • 2015-01-08
        • 2021-11-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多