私はSwiftにおける競プロの記事をいくつか投稿しています。
- 競プロで使える標準入力の便利メソッド一覧
- 競プロで使える標準エラーの出力方法 ←イマココ
- 競プロで使える便利なエクステンション一覧
- 競プロで使えるアルゴリズム関数一覧
自分で武器を増やしていくのが競プロの面白さのひとつだと思っているので、まずは自分で考えるのがオススメです。
どうしてもわからないときに、私の記事が参考になると嬉しいです
はじめに
本記事は エムティーアイ Advent Calendar 2021 の7日目の記事です。
昨日は @rtok さんで Protocol Oriented Programmingを使ってみて思ったこと でした。
Swiftで標準エラー出力する方法を紹介します。
本記事は以下の記事に触発されて執筆しました。
そのためAtCoderなどの競技プログラミングで使っていただけると嬉しいです。
環境
- OS:macOS Big Sur 11.6
- Swift:5.5
5.2.1(2021/12/07現在のAtCoder)でも動作する - Xcode:13.0 (13A233)
標準エラー出力する
Foundation
を使って標準エラー出力します。
Darwin
を使う方法もあるようですが、AtCoderだと「no such module 'Darwin'」だったので見送りました。
import Foundation
extension FileHandle: TextOutputStream {
public func write(_ string: String) {
guard let data = string.data(using: .utf8) else {
return
}
try? write(contentsOf: data)
}
}
public func printStandardError(_ value: String, separator: String = " ", terminator: String = "\n") {
var standardError = FileHandle.standardError
print(value, separator: separator, terminator: terminator, to: &standardError)
}
printStandardError(_:separator:terminator:)
メソッドを呼び出します。
print()
メソッドに倣って separator:
と terminator:
を用意しましたが、基本的には指定しなくて問題ありません。
printStandardError("I'm uhooi.")
標準出力されず、標準エラーのみ出力されます。
I'm uhooi.
おわりに
これでSwiftでも標準エラー出力できました
以上 エムティーアイ Advent Calendar 2021 の7日目の記事でした。
明日は @uhooi で GitHubのPRテンプレート(iOS・Android) です。