Swift编译器:不能下标类型' [NSObject]'索引类型'()'

时间:2015-11-18 11:19:45

标签: ios swift xcode7 swift-playground

情境:

第1步: Error 第2步: included_print_no_error 第3步: removed_print_no_error 问题摘要: 我开始使用swift及其基本概念。 首先,我尝试使用多个不同类型的元素创建一个数组ab(不确定它是否应该被称为数组)。然后我尝试测试索引值ab[2]

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

我尝试将ab[2]加盖到步骤2中提到的打印功能中,它删除了错误

然后我删除了打印方法并使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"]

Project Navigator屏幕截图

Project Navigator

注意:Xcode 7.0版(7A220)

Playground编译器出了什么问题?

1 个答案:

答案 0 :(得分:3)

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

所以当你快速输入时:

ab[1]

没有错误,但是如果你花时间并暂停光标在括号内:

ab[]

您确实会收到cannot subscript a value of type '[NSObject]' with an index of type '()'错误,但由于Playground的“实时”特性,这只是一个临时错误消息。

如果在输入索引编号后错误仍然存​​在,那么为了使其消失,您只需通过在某处添加空行,在表达式后添加空格或添加其他代码来“唤醒”Playground,当然。 Playground将重新评估所有内容并删除错误。