[Swift]expected declarationとエラーが出た時に確認すること

swift

Xcodeをいじっていたら、expected declarationとエラーが出て怒られました。

この、expected declarationエラーが出た時に確認すべきことを紹介していきます。

Swiftのexpected declarationエラーとは?

expected declaration、直訳すると「期待される宣言」とかでしょうか。

全然意味が分かりませんね。

このエラーが意味するところは、「クラスに直接処理を書いちゃダメだよ」ということです。

おそらく、クラス内部に処理を直接書いているのではないでしょうか?

処理を書くときは、クラス内でなく関数内で書きましょう。

参考:https://qiita.com/hmak/items/b6b34a052958017a40e5

クラスに直接書いていいのは、以下の二つ。

  • 変数(定数)の宣言
  • 関数の定義

例を交えて紹介

テーブルビューを作成して空の配列を準備し、そこに要素を追加したいとします。

配列に要素を追加する時は、配列.append(追加したい要素) ですね。

テーブルビュー全体のコードは割愛しますが、ポイントだけをピックアップすると以下のようなコードになります。

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    //空の配列を用意(準備)
    var arrayList = [String]()
    //配列に要素を追加 ※エラーになります
    arrayList.append("要素を追加")
    override func viewDidLoad() {
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
}

コードを見ると、arrayListで空の配列を宣言しているのは問題ありません。変数の宣言はクラス内で直接書いてもいいからです。

しかし、問題はその後のarrayList.appendの箇所。空の配列に要素を追加するという処理をクラス内で直接書いてしまっています。

このエラーを取り除くには、処理する関数を別で書いてやるか、関数内で直接記述します。

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    //空の配列を用意(String型)
    var arrayList = [String]()
    //配列に要素を追加 func addArray() {
    arraylist.append("要素を追加") }
    override func viewDidLoad() {
    super.viewDidLoad()
    //関数の呼び出し
    addArray()
    //直接記述してもOK(簡単な記述なので)
    arraylist.append("要素を追加")
}

今回は要素を追加するだけという簡単な処理ですが、複雑な処理の場合はfunc~で別で定義して関数内で呼び出してもいいと思います。

viewDidLoadの箇所で呼び出しているのでアプリ起動時に要素が追加されるという処理になります。

まとめ

expected declarationエラーが出た場合は、以下の二つを思い出しましょう。

クラスに直接書いていいのは、以下の二つ。

  • 変数(定数)の宣言
  • 関数の定義


カテゴリー