2

計算されたプロパティを含む単純な Swift 拡張機能を作成しようとしています。このコンパイル エラー (「宣言はファイル スコープでのみ有効です」) が発生する理由がわかりません。エラーは「private extension 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 に答える