【Swift入門 #6】基本的なデータ型① - 文字列Stringと整数Int

Swiftの基本データ型である文字列(String)と整数(Int)について、その特徴と使い方を初心者向けに解説します。

📚 Swift入門シリーズ: #4 コメントと文法#5 変数と定数


プログラミングでは、扱うデータの「種類」を理解することが重要です。この記事では、Swiftの基本的なデータ型である文字列(String)と整数(Int)について学びましょう。

著者
著者: Sera
大学院でAI作曲に関して研究中!
来春からデータサイエンティストとして働く予定の技術オタク。
初心者
登場人物: あかり
流行りのAIやWeb技術に興味津々!
『知りたい』気持ちで質問を止められない、好奇心旺盛な学生。
normalの表情
初心者

前回は変数varと定数letの使い分けを学んだね!

専門家

そうだね。今回は、変数や定数に入れるデータの「型」について詳しく学んでいくよ。

happyの表情
初心者

変数と定数の違いがわかったよ!letとvarを使い分けられるようになった!

専門家

いいね。今回は、変数や定数に入れるデータの「型」について詳しく学んでいくよ。

confusedの表情
初心者

前回「型」っていう言葉が出てきたけど、型って何?

専門家

いい質問だね。型(type) っていうのは、データの種類や性質を表すものなんだ。例えば、「文字列」「整数」「小数」「真偽値」みたいに、データには色々な種類があるんだよ。

型があることで、Swiftは「これは文字として扱う」「これは数字として計算する」って判断できるんだ。型が違うと、できる操作も違うんだよ。例えば、文字列同士は連結できるけど、文字列と数字を直接足し算することはできないんだ。

normalの表情
初心者

へー、データには種類があるんだ。どんな型があるの?

専門家

Swiftには色々な型があるんだけど、今日は最もよく使う2つの型、String(文字列型)Int(整数型) を学んでいこう。

String(文字列型)

専門家

String は、テキスト(文字列)を扱うための型なんだ。これまで "Hello" とか "太郎" みたいにダブルクォーテーションで囲んでいたものが、すべてString型なんだよ。

let message: String = "こんにちは"
let name: String = "太郎"

: String の部分が 型注釈(type annotation) で、「この変数はString型ですよ」って明示しているんだ。ただし、実はこれを省略しても大丈夫なんだよ。

let message = "こんにちは"  // 自動的にString型だと推論される

Swiftは 型推論(type inference) という機能を持っていて、値から自動的に型を判断してくれるんだ。ダブルクォーテーションで囲まれていれば「これはStringだな」ってわかるからね。

happyの表情
初心者

型を書かなくても自動で判断してくれるんだ!便利!

文字列の連結

専門家

String同士は、+ 演算子で連結できるんだ。

let firstName = "太郎"
let lastName = "山田"
let fullName = firstName + lastName
print(fullName)  // 太郎山田

ただ、これだと間にスペースがないから、こう書くこともできるよ。

let fullName = lastName + " " + firstName
print(fullName)  // 山田 太郎

" " は空白1文字の文字列なんだ。

文字列補間(String Interpolation)

専門家

文字列の中に変数や式の値を埋め込む、もっと便利な方法があるんだ。文字列補間(String Interpolation) っていうんだよ。

let name = "太郎"
let age = 20
let message = "私の名前は\(name)で、年齢は\(age)歳です"
print(message)  // 私の名前は太郎で、年齢は20歳です

\(変数名) という書き方で、文字列の中に変数の値を埋め込めるんだ。これを使えば、文字列の連結よりも読みやすく書けるんだよ。

excitedの表情
初心者

おお!これは便利!()で囲めばいいんだね!

専門家

そうそう。しかも、\() の中には変数だけじゃなくて、式も書けるんだ。

let price = 1000
let quantity = 3
let message = "合計金額は\(price * quantity)円です"
print(message)  // 合計金額は3000円です

\(price * quantity) で、計算結果が文字列に埋め込まれるんだよ。

文字列のプロパティとメソッド

専門家

String型には、便利な プロパティメソッド がたくさんあるんだ。

プロパティっていうのは、その値が持っている情報や特性のことで、メソッドっていうのは、その値に対して実行できる処理のことなんだよ。

例えば、文字列の長さ(文字数)を調べる count プロパティ。

let text = "Hello"
print(text.count)  // 5

ドット . で繋げて text.count と書くことで、文字列の長さを取得できるんだ。

次に、文字列が空かどうかを調べる isEmpty プロパティ。

let emptyText = ""
print(emptyText.isEmpty)  // true

let text = "Hello"
print(text.isEmpty)  // false

isEmpty は、文字列が空の場合に true、何か文字が入っている場合に false を返すんだよ。

confusedの表情
初心者

true とか false って何?

専門家

それは次の次の記事で学ぶ「真偽値(Bool型)」なんだ。今は「true は『はい』、false は『いいえ』みたいな意味」って思っておいてもらえれば大丈夫だよ。

よく使う文字列メソッド

専門家

他にもよく使うメソッドを紹介するね。

大文字・小文字の変換

let text = "Hello"
print(text.uppercased())  // HELLO
print(text.lowercased())  // hello

uppercased() で全て大文字に、lowercased() で全て小文字に変換できるんだ。メソッドは、名前の後に括弧 () をつけて呼び出すんだよ。

前後の空白を削除

let text = "  Hello  "
print(text.trimmingCharacters(in: .whitespaces))  // Hello

文字列の前後にある空白を削除できるんだ。これはユーザーの入力を処理するときによく使うよ。

特定の文字列を含むか確認

let text = "Hello, World!"
print(text.contains("World"))  // true
print(text.contains("Swift"))  // false

contains() メソッドで、特定の文字列が含まれているか確認できるんだ。

happyの表情
初心者

いろんなことができるんだね!便利!

Int(整数型)

normalの表情
初心者

次は整数型?それって普通の数字のこと?

専門家

そうだよ。Int は整数(整数=小数点のない数)を扱うための型なんだ。「Integer(整数)」の略なんだよ。

let age: Int = 20
let score: Int = 100

これも型推論が効くから、型注釈を省略できるんだ。

let age = 20  // 自動的にInt型だと推論される

整数の計算

専門家

Int型の値は、算術演算子を使って計算できるんだ。

let a = 10
let b = 3

print(a + b)  // 13(加算)
print(a - b)  // 7(減算)
print(a * b)  // 30(乗算)
print(a / b)  // 3(除算)
print(a % b)  // 1(剰余)

ここで注意が必要なのは、整数の除算は小数を切り捨てる ってことなんだ。10 / 3 は本当は 3.333... だけど、Int同士の計算では 3 になるんだよ。

それと、%剰余演算子(modulo) って呼ばれていて、割り算の余りを計算するんだ。10 % 3 は「10を3で割った余り」だから 1 になるんだよ。

surprisedの表情
初心者

10割る3が3になっちゃうの!?小数はどこいったの?

専門家

Int型は整数しか扱えないから、小数部分は切り捨てられちゃうんだ。小数を扱いたい場合は、次の記事で学ぶ「Double型」を使う必要があるんだよ。

型が違うと、同じ演算でも結果が変わることがあるんだ。これが型を理解することの重要性なんだよ。

整数の範囲

専門家

Intには扱える数値の範囲があるんだ。現代のコンピュータでは、Intは通常64ビットで、約 -9京 から +9京 までの数を扱えるんだよ。

print(Int.min)  // -9223372036854775808
print(Int.max)  // 9223372036854775807

Int.minInt.max で、Intの最小値と最大値を確認できるんだ。普通のプログラムでは、この範囲で十分なことがほとんどだよ。

surprisedの表情
初心者

9京!?そんなに大きい数まで扱えるの!?

専門家

そうなんだ。でも、もし範囲を超えた計算をしようとすると、オーバーフロー っていう問題が起きることがあるんだ。Swiftはオーバーフローを検出してクラッシュするようになっているから、安全性が高いんだよ。

整数の便利な機能

専門家

Int型にも便利なプロパティやメソッドがあるんだ。

絶対値を取得

let number = -10
print(abs(number))  // 10

abs() 関数で、数値の絶対値を取得できるんだ。

最大値・最小値を求める

let a = 10
let b = 20
print(max(a, b))  // 20
print(min(a, b))  // 10

max()min() で、複数の値から最大値・最小値を求められるんだよ。

累乗を計算

let result = pow(2.0, 3.0)  // 2の3乗
print(result)  // 8.0

pow() 関数で累乗を計算できるんだけど、これは引数と戻り値がDoubleなんだ。Doubleについては次の記事で学ぶよ。

型の変換

confusedの表情
初心者

StringとIntって、お互いに変換できないの?例えば、"123"っていう文字列を数字の123にしたいときとか。

専門家

素晴らしい質問だね。実は、型の変換はとても重要な操作なんだ。

IntからStringへの変換

let age = 20
let ageString = String(age)
print(ageString)  // "20"(文字列)

String() に Int を渡すことで、整数を文字列に変換できるんだ。

StringからIntへの変換

let numberString = "123"
let number = Int(numberString)
print(number)  // Optional(123)

Int() に String を渡すことで、文字列を整数に変換できる...んだけど、ちょっと複雑なんだ。Optional(123) って表示されているよね。これは オプショナル型 っていう特別な型で、「値があるかもしれないし、ないかもしれない」っていう状態を表しているんだよ。

confusedの表情
初心者

Optional?値があるかもしれないし、ないかもしれない?どういうこと?

専門家

例えば、"abc" っていう文字列を数字に変換しようとしたらどうなると思う?

let invalidString = "abc"
let number = Int(invalidString)
print(number)  // nil

"abc" は数字じゃないから、変換できないよね。この場合、nil っていう「値がない」ことを表す特殊な値になるんだ。

Swiftは、変換が失敗する可能性がある操作には、オプショナル型を使って「失敗するかもしれませんよ」って教えてくれるんだよ。オプショナル型については、第6章で詳しく学ぶから、今は「変換が失敗することもあるんだな」って覚えておいてもらえれば大丈夫だよ。

文字列補間での自動変換

専門家

ちなみに、文字列補間 \() の中では、自動的にStringに変換されるんだ。

let age = 20
let message = "私は\(age)歳です"
print(message)  // 私は20歳です

これは便利だから、よく使われる書き方なんだよ。

StringとIntを混ぜて使うときの注意

confusedの表情
初心者

"123"っていう文字列と、456っていう数字を足したらどうなるの?

専門家

試してみよう。

let stringNumber = "123"
let intNumber = 456
// let result = stringNumber + intNumber  // エラー!

これはエラーになるんだ。「Binary operator '+' cannot be applied to operands of type 'String' and 'Int'」って、「+演算子はStringとIntには使えません」っていうエラーが出るんだよ。

Swiftは 型安全な言語 で、異なる型同士の操作を許さないんだ。もし計算したいなら、どちらかの型に揃える必要があるんだよ。

方法1: StringをIntに変換してから計算

let stringNumber = "123"
let intNumber = 456
if let num = Int(stringNumber) {
    let result = num + intNumber
    print(result)  // 579
}

方法2: IntをStringに変換してから連結

let stringNumber = "123"
let intNumber = 456
let result = stringNumber + String(intNumber)
print(result)  // "123456"(文字列として連結)

方法1は数値計算、方法2は文字列連結になるから、結果が全然違うよね。

surprisedの表情
初心者

型が違うと計算できないんだ!型って大事なんだね!

実践練習

専門家

じゃあ、練習問題をやってみよう。

問題1: 名前と年齢を変数で定義して、「〇〇さんは△△歳です」という文を文字列補間を使って出力してみて。

excitedの表情
初心者

やってみる!

let name = "太郎"
let age = 25
let message = "\(name)さんは\(age)歳です"
print(message)

できた!

専門家

完璧だね!次の問題も試してみよう。

問題2: 商品の価格(1000円)と個数(3個)を定義して、合計金額を計算して「合計は〇〇円です」と出力してみて。

normalの表情
初心者
let price = 1000
let quantity = 3
let total = price * quantity
print("合計は\(total)円です")

こうかな?

専門家

素晴らしい!完璧だよ。StringとIntの両方を使いこなせているね。

まとめ

この記事では、SwiftのStringとInt型について学びました。

String(文字列型):

  • テキストを扱う型
  • ダブルクォーテーション " で囲む
  • + で連結できる
  • 文字列補間 \() で変数や式を埋め込める
  • countisEmptycontains() などの便利なプロパティ・メソッド

Int(整数型):

  • 整数を扱う型
  • 算術演算子(+-*/%)で計算できる
  • 整数の除算は小数を切り捨てる
  • 約 -9京 から +9京 までの範囲

型の変換:

  • String(値) でIntからStringに変換
  • Int(文字列) でStringからIntに変換(失敗する可能性あり)
  • 異なる型同士は直接計算できない(型の統一が必要)

次回は「基本的なデータ型②」として、小数(Double)と真偽値(Bool)について学びます。より多様なデータを扱えるようになりましょう!

← ブログ一覧に戻る