[Swift]「フォーマット指定子」

本記事では、Swiftのフォーマット指定子を活用する方法について詳しく解説します。

基本的な構文や文字列数値日付のフォーマット方法、さらには複数の値の組み合わせやローカライズの手法など、幅広いテクニックを学ぶことができます。

目次

フォーマット指定子の基本

フォーマット指定子は、文字列内に特定のパターンで記述されることで、データの表示形式を指定する仕組みです。

ここでは、フォーマット指定子の構文と基本的な使い方について解説します。

文字列のフォーマット

文字列と整数

例えば、以下のコードを見てみましょう。

コード例:文字列と整数
let name = "John"
let age = 25

let message = 
    String(format: 
        "名前:%@、年齢:%d歳", 
        name, age)
print(message)

このコードでは、フォーマット指定子を使って文字列の中にデータを埋め込んでいます。
%s“は文字列を表し、”%d“は整数を表します。
String(format: ...)の形式で文字列を作成することで、指定された形式でデータが表示されます。

上記のコードの出力結果は次の通りです。

名前:John、年齢:25歳

このように、フォーマット指定子を使うことで、変数の値を特定の形式で表示することができます。これにより、データの見栄えを整えたり、情報をわかりやすく伝えることができます。

文字列のパディング

コード例:文字列のパディング

%2d のように数字を指定すると、指定した桁数に満たない場合は先頭に空白が追加されます。
例えば、%2d で数値 「5」 をフォーマットすると、 「 5」となります。

let number = 5

print("2桁: \(String(format: 
    "%2d", number))")  
//出力結果 2桁:  5

print("3桁: \(String(format: 
    "%3d", number))")  
//出力結果 3桁:   5

print("4桁: \(String(format: 
    "%4d", number))")  
//出力結果 4桁:    5

数値のフォーマット

数値の桁区切りや小数点以下の精度の指定方法

数値の桁区切り小数点以下の精度を指定する方法について、解説します。

コード例:数値の桁区切り
let number = 1000000

let formattedNumber = 
    String.localizedStringWithFormat("%d", number)
print(formattedNumber)

このコードでは、String.localizedStringWithFormatを使って数値の桁区切り表示を行っています。

出力結果は次の通りです。

1,000,000

数値が3桁ごとにカンマで区切られ、読みやすく表示されます。

また、以下のコードを見てみましょう。

コード例:小数点以下の精度を指定
let pi = 3.14159

print(String(format: 
    "%.1f", pi))  
//出力結果 3.1

print(String(format: 
    "%.2f", pi))  
//出力結果 3.14

print(String(format: 
    "%.3f", pi))  
//出力結果 3.142

%.○f“という指定子を使って小数点以下の精度を○桁に制限しています。

マイナス符号やプラス符号の表示方法

%d“は整数の表示に使用される指定子で、正の数はそのまま表示されますが、負の数マイナス符号を付けて表示されます。

以下のコード例をご覧ください

コード例:マイナス符号
let minus_number = -5
let plus_number = 5

print(String(format: 
    "%d", minus_number))  
//出力結果 -5

print(String(format: 
    "%d", plus_number))   
//出力結果  5

一方、”%+d“は整数の表示において、正の数にはプラス符号を付けて表示するための指定子です。マイナス符号も負の数には自動的にマイナス符号が付けられます。

以下のコード例をご覧ください。

コード例:プラス符号
let minus_number = -10
let plus_number = 10

print(String(format: 
    "%d", minus_number))  
//出力結果 -10

print(String(format: 
    "%d", plus_number))   
//出力結果 +10

このように、”%+d“を使用すると正の数プラス符号が表示されます。

日時のフォーマット

日付時刻書式指定子の利用方法について、Xcodeのコード事例を交えて説明いたします。

日付のフォーマット指定

日付の書式指定には、以下のような指定子を使用します。

コード例:日付
let date = Date()

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = 
    "yyyy/MM/dd"

let formattedDate = 
    dateFormatter.string(from: date)
print(formattedDate)

上記のコードでは、”yyyy/MM/dd“という書式指定子を使って年月日を表示しています。

出力結果は次のようになります。

2023/06/03
DateFormatter

DateFormatterは、SwiftのFoundationフレームワークに含まれるクラスであり、日付や時刻のフォーマットに使用されます。iOSアプリ開発などで日付や時刻を文字列として表示する際に便利なクラスです。

DateFormatterを使うことで、日付や時刻を特定の形式に整形することができます。例えば、”2023-06-07″のような日付を”2023年6月7日”のような日本語表記に変換したり、”14:30″のような時刻を”2:30 PM”のような12時間表示に変換したりすることができます。

時刻のフォーマット指定

時刻の書式指定には、以下のような指定子を使用します。

コード例:時刻
let date = Date()

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = 
    "HH:mm:ss"

let formattedTime = 
    dateFormatter.string(from: date)
print(formattedTime)

このコードでは、”HH:mm:ss“という書式指定子を使って時分秒を表示しています。

出力結果は次のようになります。

16:23:45

曜日や月のフォーマット指定

曜日の略称の書式指定には、次のような指定子を使用します。

コード例:曜日・月
let date = Date()

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = 
    "EEE, MMM"

let formattedDayAndMonth = 
    dateFormatter.string(from: date)
print(formattedDayAndMonth)

このコードでは、”EEE, MMM“という書式指定子を使って曜日の略称と月名の略称を表示しています。

出力結果は次のようになります。

Fri, Jun

DateFormatterの主なプロパティ

.dateStyle

dateStyle: 日付のスタイルを指定します。

dateFormatter.dateStyle = 
    .short   
//短い形式(6/1/23)

dateFormatter.dateStyle = 
    .medium. 
//中程度の形式(Jun 1, 2023)

dateFormatter.dateStyle = 
    .long    
//長い形式(June 1, 2023)

dateFormatter.dateStyle = 
    .full    
//完全な形式(Tuesday, June 1, 2023)
.timeStyle

timeStyle: 時刻のスタイルを指定します。


dateFormatter.timeStyle = 
    .none   
//時刻を表示しない形式

dateFormatter.timeStyle = 
    .short  
//短い形式(1:30 PM)

dateFormatter.timeStyle = 
    .medium 
//中程度の形式(1:30:15 PM)

dateFormatter.timeStyle = 
    .long   
//長い形式(1:30:15 PM JST)

dateFormatter.timeStyle = 
    .full   
//完全な形式(1:30:15 PM Japan Standard Time)
.dateFormat

dateFormat: カスタムな日付フォーマットを指定します。

dateFormatter.dateFormat = 
    "yyyy/MM/dd"  
//年月日の形式(2023/06/01)

dateFormatter.dateFormat = 
    "HH:mm:ss"    
//時刻の形式(13:30:15)
.locale

locale: フォーマットに使用するロケールを指定します。
デフォルトではデバイスの現在のロケールが使用されます。
ロケールを指定することで、日付や時刻の表示が言語や地域に応じた形式で行われます。

// 日本のロケールを指定
dateFormatter.locale = 
    Locale(identifier: "ja_JP") 
.timeZone

timeZone: フォーマットに使用するタイムゾーンを指定します。
デフォルトではデバイスの現在のタイムゾーンが使用されます。
異なるタイムゾーンの日付や時刻を表示する場合に使用します。

// アメリカ東部のタイムゾーンを指定
dateFormatter.timeZone = 
    TimeZone(identifier: "America/New_York") 
.calendar

calendar: フォーマットに使用するカレンダーを指定します。
デフォルトではデバイスの現在のカレンダーが使用されます。
異なるカレンダーシステムを持つ場合に使用します。

// 和暦のカレンダーを指定
dateFormatter.calendar = 
    Calendar(identifier: .japanese) 
.eraSymbols

eraSymbols: 紀元(BC, AD など)の表示に使用するシンボルの配列を指定します。

//紀元の表示に "BC"と"AD"を使用
dateFormatter.eraSymbols = 
    ["BC", "AD"]
.monthSymbols

monthSymbols: 月名の表示に使用するシンボルの配列を指定します。

//月名の表示に指定した配列のシンボルを使用

let dateFormatter = DateFormatter()
dateFormatter.monthSymbols = 
    ["January", "February", "March", 
    "April", "May", "June", 
    "July", "August", "September", 
    "October", "November", "December"]

dateFormatter.dateFormat = "MMMM yyyy"
let currentDate = Date()
let formattedDate = 
    dateFormatter.string(from: currentDate)
print("Formatted Date: \(formattedDate)")

//出力: Formatted Date: June 2023
.weekdaySymbols

weekdaySymbols: 曜日名の表示に使用するシンボルの配列を指定します。

//曜日名の表示に指定した配列のシンボルを使用

let dateFormatter = DateFormatter()
dateFormatter.weekdaySymbols = 
   ["Sunday", "Monday", "Tuesday", 
    "Wednesday", "Thursday", "Friday", 
    "Saturday"]

dateFormatter.dateFormat = "EEEE"
let currentDate = Date()
let formattedDate = 
    dateFormatter.string(from: currentDate)
print("Formatted Date: \(formattedDate)")

//出力: Formatted Date: Wednesday
.AMSymbol

AMSymbol: 午前の表示に使用するシンボルを指定します。

//午前の表示に指定したシンボルを使用

let dateFormatter = DateFormatter()
dateFormatter.AMSymbol = "AM"

dateFormatter.dateFormat = "a"
let currentDate = Date()
let formattedDate = 
    dateFormatter.string(from: currentDate)
print("Formatted Date: \(formattedDate)")

//出力: Formatted Date: AM

上記コードのAMをPMに変更して、PMSymbol:午後の表示に使用するシンボルを指定できます。

この記事が気に入ったら
いいね または フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次