我试图创建一个包含计算属性的简单Swift扩展。我不明白为什么我会收到此编译错误(“声明仅在文件范围内有效”)。错误发生在"私有扩展OpStack"线。 (此代码包含在类中。)
如果删除扩展程序中的所有代码,我仍然会收到同样的错误。
以下是代码:
private typealias OpStack = Array<Op>
private extension OpStack {
//^ error:"This declaration is only valid at file scope"
var topIsOperation: Bool {
if self.isEmpty { return false }
switch self[self.count-1] {
case .Operand:
return false
default:
return true
}
}
}
答案 0 :(得分:1)
问题是extension Array<> { }
有效,扩展了数组,但extension Array<SomeType> { }
不起作用,因为它试图使用SomeType类型的元素而不是所有数组扩展某些特定数组。
我通过使用结构而不是尝试扩展Array来解决问题:
struct OpStack {
var ops = [Op]()
var topIsOperation: Bool {
if self.ops.isEmpty { return false }
switch self.ops[self.ops.count-1] {
case .Operand:
return false
default:
return true
}
}
}
或者,我可以创建一个函数:
func topIsOperation(a:[op]) - &gt; bool {}