我有这个问题,访问数组索引时出错。索引应为整数,但不起作用。我最初尝试使用变量,但是在此示例中,我将其更改为整数0,只是为了表明它不是问题所在的变量。
let location = SNStore.Welland[index].locations[0] {
if location.timestamp > 0 {
}
}
错误是:
Cannot subscript a value of type '[LocationStore]' with an index of type '(Int, () -> ())'
那么有人可以解释为什么数组不希望索引为int吗?它很奇怪,我听不懂。
我在快速帮助中检查了位置声明,它正确显示了在结构中如何声明位置。(在结构中,它的末尾带有花括号以将其初始化为空。)
var locations: [LocationStore]
在Swift中进行下标是通过调用subscript
需要使用的特殊方法在幕后完成的Int
。所以当你写:
locations[0]
Swift实际上是subscript
使用里面的值来调用函数[]
:
locations.subscript(0)
您不能subscript
直接调用,但是它在那里,您可以通过subscript
为自己的类实现定义自定义下标。
您将Swift与{ }
后面的多余花括号相混淆locations[0]
。Swift将其{ }
及其内容解释为带签名的闭包() -> ()
(不输入任何内容,不返回任何输出)。由于尾随的闭包语法,Swift然后将该闭包解释为调用该subscript
函数locations
以执行索引的第二个参数。此下标函数接受一个参数an Int
,但是您要传递两个参数anInt
和() -> ()
close。这就是错误消息告诉您的内容。
解决方法是删除多余的内容{ }
:
let location = SNStore.Welland[index].locations[0]
if location.timestamp > 0 {
// do something
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句