0
1

More than 3 years have passed since last update.

[Swift]同じ名前の変数に式を割り当てる

Last updated at Posted at 2021-07-15

※この記事はSwift by Sundellの内容を日本語に翻訳したものです。

Swift 5.4の新機能:

selfを使って手動で明確にすることなく、同じ名前の式に割り当てられるローカル変数を作成できるようになりました。

たとえば、次のItemListViewControllerには、単にitem(at :)を呼び出すように選択した特定のIndexPathのアイテムを取得できるメソッドがあります。

class ItemListViewController: UIViewController {
    ...

    private func item(at indexPath: IndexPath) -> Item {
        ...
    }
}

Swift 5.3以前を使用しているときに、上記のメソッドを呼び出して、その結果をitemとも呼ばれるローカルのletまたはvarに割り当てる場合、コンパイラーが使用できるようにするには、メソッド呼び出しの前にselfを付ける必要があります。 2つを分けるには—次のように:

class ItemListViewController: UIViewController {
    ...

    private func showDetailViewForItem(at indexPath: IndexPath) {
        let item = self.item(at: indexPath)
        ...
    }
}

ただし、Swift 5.4以降、これは不要になり、コンパイラは、selfを使用して参照するかどうかに関係なく、右側のアイテムシンボルがメソッドの呼び出しを参照していることを自動的に認識します。

class ItemListViewController: UIViewController {
    ...

    private func showDetailViewForItem(at indexPath: IndexPath) {
        let item = item(at: indexPath)
        ...
    }
}

おそらく、この新しい構文機能を使用する私のお気に入りの方法は、非同期コードの単体テストを作成するときです。これには通常、組み込みのexpectationAPIを使用してXCTestExpectationインスタンスを作成することが含まれます。このような期待の最も自然な名前は単にexpectationであることが多いため、次のことができるようになったのは本当に素晴らしいことです。

class ItemLoaderTests: XCTestCase {
    ...

    func testLoadingItem() {
        let expectation = expectation(description: "Loading item")
        ...
    }
}

上記の機能が役立つもう1つのタイプの状況は、プロパティのローカルで変更可能なコピーを作成する場合です。これは、コピーするプロパティを参照するときにselfを使用せずに実行できるようになりました。たとえば、次のようになります。

struct Item {
    var title: String
    var prefix: String?
    var suffix: String?

    func fullTitle() -> String {
        var title = title  // 従来は var title = self.title

        if let prefix = prefix {
            title = prefix + title
        }

        if let suffix = suffix {
            title += suffix
        }

        return title
    }
}

確かに、これはSwiftコードの記述方法を完全に変える革新的な新しい構文機能ではないかもしれませんが、すべての機能や変更が必要なわけではありません。個人的には、このような「生活の質」の向上は非常に歓迎されており、特定の種類のコードをかなり軽量に感じさせることができると思います。

元の記事

Assigning an expression to a variable with the same name Swift by Sundell

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1