LoginSignup
35
15

More than 1 year has passed since last update.

ResultBuilderを悪用してメソッドの返り値をプリントデバッグする便利なやつを作る

Posted at

メソッドの返り値にどんな値が入っているのか確認したいことがあります。

func getCurrentUser() -> User {
  userRepository.getCurrent()
}

この場合、次のように修正して見ることになります。

func getCurrentUser() -> User {
  let user = userRepository.getCurrent()
  print(user)
  return user
}

折角省略したreturnを書き直すハメになりました。さらにuser変数を作ることにもなりました。
これではprintデバッグをサクッとしたいときに時間がかかりますね…。

そこで、resultBuilderを使って返り値をprintするBuilderもとい、Printerを作ってみます。

@resultBuilder
public struct DebugPrinter {
    public static func buildBlock<T: CustomDebugStringConvertible>(
        _ component: T,
        file: String = #file,
        function: String = #function,
        line: Int = #line
    ) -> T {
        print(file, function, line, component.debugDescription)
        return component
    }
}

こうすることで、

@DebugPrinter
func getCurrentUser() -> User {
  userRepository.getCurrent()
}

メソッドの上に@DebugPrinterと書くだけで

Sources/Repository/UserRepository.swift getCurrentUser 64 
{
  id: 123
  name: Michel
  age: 12
}

とコンソールに出力されました。
メソッド名やファイル名も出力されるので、フィルタもできて便利ですね。

35
15
1

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
35
15