Swift 编译器:无法使用类型为“()”的索引为类型为“[NSObject]”的值添加下标

Swift Compiler: cannot subscript a value of type '[NSObject]' with an index of type '()'

场景:

第 1 步: 第2步: 第 3 步: 问题总结: 我开始使用 swift 及其基本概念。 首先,我尝试制作一个包含多个不同类型元素的数组 ab(不确定是否应将其称为数组)。然后我尝试测试一个索引值 ab[2].

成功测试索引值后,我创建了一个字典 dictAbc,其中我使用不同的索引 ab[4] ab[6] 指向它的键。它引入了第 1 步中提到的错误。

我尝试将 ab[2] 封盖到第 2 步中提到的打印函数中,它消除了错误

然后我删除了 print 方法并使 STEP 3 代码与 STEP 1 相同,现在不会产生任何错误。

代码:

import UIKit

var str = "Hello, playground"

var num: Float64 = 4.00000000000000000000000000

print("\(num)")

let a = "Hello"
let b = 12786
let c = a + String(b)


var ab = [1221, 123123, 123123,123123,"asdasd", "adasdasd",      1263781.123]
ab[2]
var dictAbc = ["hello":ab[4], "let":ab[6]]
dictAbc["let"]

项目导航器屏幕截图

注:Xcode版本 7.0 (7A220)

Playground编译器有问题吗?

这是因为 Playground 的工作原理:它会尝试在您完成输入后立即计算每个 表达式。

所以当你快速输入时:

ab[1]

没有错误,但如果您花点时间将光标停在括号内:

ab[]

您确实会收到 cannot subscript a value of type '[NSObject]' with an index of type '()' 错误,但这只是一个 临时的 错误消息,因为 Playground 的 "real-time" 性质。

如果在输入索引号后错误仍然存​​在,那么要使其消失,您只需 "wake up" 游乐场,在某处添加一个空行,在 space 之后添加一个 space表达式,当然也可以添加其他代码。然后 Playground 将重新评估所有内容并删除错误。