#13 Swiftで学ぶクラスの基本
Swiftには「クラス」と、見た目がよく似た「構造体(struct)」という2種類の仕組みがあります。この記事では、Swiftにおけるクラスの基本と、構造体との使い分けを解説します。
クラスを作ってみる
class Person {
var name: String
init(name: String) {
self.name = name
}
func greet() {
print("こんにちは、\(name)です")
}
}
initという特別なメソッドが、Javaのコンストラクタにあたります。self.name = nameのように、渡された引数をインスタンス自身のプロパティに保存するのが典型的な使い方です。
クラスからインスタンスを作る
let person = Person(name: "太郎")
person.greet() // こんにちは、太郎です
クラスと構造体の違い
Swiftにはstructという、クラスとよく似た書き方をする仕組みもあります。大きな違いは、クラスは複数の変数から同じ実体を共有できる(参照型)のに対し、構造体はコピーされて別々の実体になる(値型)、という点です。
class PersonClass { var name = "太郎" }
struct PersonStruct { var name = "太郎" }
let a = PersonClass()
let b = a
b.name = "花子"
print(a.name) // 花子(同じ実体を共有しているため変わる)
var c = PersonStruct()
var d = c
d.name = "花子"
print(c.name) // 太郎(コピーされているため変わらない)
継承ができるのはクラスだけ
Swiftでは、あるクラスの機能を引き継ぐ「継承」ができるのはクラスのみで、構造体は継承できません。
class Animal {
func sound() -> String { "..." }
}
class Dog: Animal {
override func sound() -> String { "ワン" }
}
Swiftならではの注意点
「クラスにするか構造体にするか」という選択は、Swiftを学ぶ上で重要なポイントです。まずは、単純にデータを持つだけなら構造体、複雑な振る舞いや共有・継承が必要ならクラス、という基準で使い分けるとよいでしょう。Apple公式のフレームワーク(SwiftUIなど)では、意図しない値の書き換えを防ぎやすい構造体が積極的に使われる傾向があります。
まとめ
Swiftのクラスはinitで初期化し、継承が可能です。構造体との違い(共有される参照型か、コピーされる値型か)を理解して使い分けることが大切です。
本ページはプロモーションを含みます。
参考書籍(PR)
Swiftをもっと学びたい方には「これからつくる iPhoneアプリ開発入門」がおすすめです。
PR
コードを書かずに自動化したい方へ
「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。
コメント
コメントを投稿