[Xcode 9.3][新機能] 関数・メソッドやプロパティの呼び出し元に素早くジャンプできるようになりました

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは!今年WWDCに参加することが決まってワクワクドキドキしている加藤です。

さて、今回は先日リリースされたXcode 9.3の新機能の1つをご紹介します。

以下、リリースノートのSource Editorの新機能からの引用です。

Added Callers to the Structured Selection Action Popover. You can now command-click on functions, methods, and properties and quickly navigate to their callers. (32587508)

どうやらメソッドやプロパティの呼び出し元に簡単にジャンプできるようになったようですね。

検証環境

本エントリは以下の環境で検証を行っています。

  • macOS High Sierra バージョン 10.13.3
  • Xcode Version 9.3 (9E145)

試してみた

早速試してみます。

検証用ソースコード

検証用に以下のソースコードを作成しました。 ※検証用なので内容に深い意味はありません。


import Foundation

struct User {
    let identifier: String
    let name: String
}


import Foundation

class UserRepository {

    private let users = [
        User(identifier: "1", name: "Kato"),
        User(identifier: "2", name: "Nakamura"),
        User(identifier: "3", name: "Honda"),
    ]

    func findUser(byIdentifier id: String) -> User? {
        return users.first { $0.identifier == id}
    }
}

import UIKit

class AViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let repository = UserRepository()
        let user = repository.findUser(byIdentifier: "2")
        print(user?.name as Any)
    }
}

AViewControllerUserRepositoryfindUser(byIdentifier)を呼び出しています。

メソッド名をcommandキーを押しながらクリックしてCallerを選択

この状態でUserRepositoryfindUserをcommandキーを押しながらクリックし、ポップアップメニューに表示される「Caller」をクリックすると、呼び出し元であるAViewControllerにジャンプします。

gifで見るとわかりやすいですね。

呼び出し元が複数ある場合はどうなるのか

上述の場合、UserRepositoryfindUser(byIdentifier)を呼び出しているのはAViewControllerのみであったためCallerをクリックした際にすぐにAViewControllerにジャンプしましたが、呼び出し元が複数ある場合はどうなるのでしょうか?

ということでBViewControllerを作って、AViewControllerと同じようにUserRepositoryfindUser(byIdentifier)を呼び出してみます。

import UIKit

class BViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let repository = UserRepository()
        let user = repository.findUser(byIdentifier: "2")
        print(user?.name as Any)
    }
}

この状態でUserRepositoryfindUserをcommandキーを押しながらクリックします。よく見ると、メニューも「Caller」から「Callers...」に変わっていることがわかります。「Callers...」をクリックすると呼び出し元が複数表示され、選択すると該当の場所にジャンプするようになっていました。

こちらもgifで見るとわかりやすいと思います。

おわりに

今回はXcode 9.3で関数・メソッドやプロパティの呼び出し元に素早くジャンプできるようになったことをご紹介しました。 こういう便利な機能をどんどん使って開発していきましょう!

参考資料