メソッドの返り値にどんな値が入っているのか確認したいことがあります。
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
}
とコンソールに出力されました。
メソッド名やファイル名も出力されるので、フィルタもできて便利ですね。