LoginSignup
1

More than 1 year has passed since last update.

競プロで使える標準エラーの出力方法(Swift)

Last updated at Posted at 2021-12-07

私はSwiftにおける競プロの記事をいくつか投稿しています。

自分で武器を増やしていくのが競プロの面白さのひとつだと思っているので、まずは自分で考えるのがオススメです。
どうしてもわからないときに、私の記事が参考になると嬉しいです :relaxed:

はじめに

本記事は エムティーアイ 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'」だったので見送りました。

OutputUtils.swift
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: を用意しましたが、基本的には指定しなくて問題ありません。

main.swift
printStandardError("I'm uhooi.")

標準出力されず、標準エラーのみ出力されます。

標準出力
標準エラー出力
I'm uhooi.

おわりに

これでSwiftでも標準エラー出力できました :relaxed:

以上 エムティーアイ Advent Calendar 2021 の7日目の記事でした。
明日は @uhooiGitHubのPRテンプレート(iOS・Android) です。

参考リンク

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
What you can do with signing up
1