2

我正在尝试创建一个包含计算属性的简单 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
      }
    }
  }
4

1 回答 1

1

问题是extension Array<> { }有效的,扩展数组,但extension Array<SomeType> { }不起作用,因为它试图用 SomeType 类型的元素而不是所有数组来扩展一些特定的数组。

我通过使用结构而不是尝试扩展数组解决了这个问题:

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]) -> bool { }

于 2015-02-28T04:27:31.580 回答