ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
Swiftでは、classキーワードでクラスを定義し、プロパティ・メソッド・イニシャライザ(init)をまとめ、let obj = クラス名()でインスタンスを生成してobj.メソッド名()の形でメソッドを呼び出します。クラスはデータ(プロパティ)とそれを操作する処理(メソッド)を1つにまとめるための仕組みで、設計図(クラス)から実体(インスタンス)を作って利用するのが基本的な流れです。
| この記事の要点 |
|---|
|
クラスを定義する
クラスは class キーワードに続けて名前を書き、波かっこ { } の中にメンバー(プロパティやメソッド)を記述します。クラス名は慣習として大文字始まり(アッパーキャメルケース)にします。次は、犬を表す Dog クラスを最小構成で定義した例です。
|
class Dog { // クラスの定義 // ここにプロパティやメソッドを書く } |
プロパティを持たせる
プロパティは、そのクラスのインスタンスが持つ「データ」です。クラスの内部で var(あとから変更可能)または let(変更不可の定数)として宣言します。プロパティに初期値を直接書いておくこともできますし、後述のイニシャライザで設定することもできます。
|
class Dog { var name = "" // 文字列のプロパティ var age = 0 // 整数のプロパティ } |
イニシャライザ(init)で初期化する
イニシャライザはインスタンス生成時に自動で呼ばれる特別な処理で、init という名前で定義します。引数で受け取った値をプロパティに設定するのが典型的な使い方です。Swiftでは、宣言したすべての格納プロパティが初期化完了までに値を持つ必要があるため、初期値を直接書いていないプロパティは init 内で必ず設定します。引数名とプロパティ名が同じときは、self を付けて両者を区別します(後述)。
|
class Dog { var name: String var age: Int
init(name: String, age: Int) { // イニシャライザ self.name = name self.age = age } } |
メソッドを定義して呼び出す
メソッドは、クラスの内部で func キーワードを使って定義する関数です。引数や戻り値(-> の後ろに型)を持てます。メソッドの中からは、同じインスタンスのプロパティや別のメソッドにそのままアクセスできます。定義したメソッドは、インスタンス(実体)に対して インスタンス.メソッド名(引数ラベル: 値) の形で呼び出します。
|
class Dog { var name: String
init(name: String) { self.name = name }
func bark() -> String { // メソッドの定義 return name + "がワンと鳴いた" } }
let dog = Dog(name: "ポチ") // インスタンス生成 print(dog.bark()) // メソッド呼び出し |
出力結果
|
ポチがワンと鳴いた |
インスタンスを生成する
クラスはあくまで設計図であり、実際に使うにはインスタンス(実体)を作る必要があります。インスタンスは クラス名(引数ラベル: 値) という形で生成します。このかっこ呼び出しが、定義しておいたイニシャライザの呼び出しに対応します。生成したインスタンスは let や var の変数に入れて使います。
|
let dog1 = Dog(name: "ポチ") let dog2 = Dog(name: "タロウ") // 別のインスタンス print(dog1.name) // ポチ print(dog2.name) // タロウ |
同じクラスから作ったインスタンスでも、それぞれが独立したプロパティの値を持ちます。dog1 と dog2 は別物として扱われ、一方の名前を変更してももう一方には影響しません。1つのクラス(設計図)から、状態の異なる実体をいくつでも作れるのがオブジェクト指向の基本的な利点です。なお、プロパティへのアクセスやメソッドの呼び出しは、いずれも インスタンス.メンバー名 という共通の書き方(ドット記法)で行います。
self とは
self は「メソッドやイニシャライザを実行している、そのインスタンス自身」を指すキーワードです。よく使うのは、引数名とプロパティ名が同じときに両者を区別する場面です。self.name はプロパティ、name は引数というように、self. を付けることでプロパティ側を明示できます。名前が重複していなければ self. は省略でき、name と書くだけでプロパティを参照できます。メソッドの内部から同じインスタンスの別のメソッドを呼ぶときも、self.別のメソッド() あるいは self. を省略してそのまま呼び出せます。最初のうちは、プロパティを設定する init の中では self. を付けておくと意図が読み取りやすくなります。
継承とオーバーライド
クラスは、既存のクラスを土台にして新しいクラスを作る「継承」ができます。class サブクラス名: 親クラス名 { } と書くと、親クラスのプロパティやメソッドを引き継ぎます。親のメソッドを作り直したいときは、override キーワードを付けて同名のメソッドを定義します。親側の実装を呼びたいときは super.メソッド名() を使います。
|
class Animal { func sound() -> String { return "…" } }
class Cat: Animal { // Animal を継承 override func sound() -> String { // 上書き return "ニャー" } }
print(Cat().sound()) // ニャー |
struct(値型)と class(参照型)の違い
Swiftにはクラスとよく似た「構造体(struct)」もあり、プロパティやメソッドを持てる点は同じです。最大の違いは、クラスが参照型、構造体が値型であることです。値型は変数へ代入したり関数へ渡したりするとコピーが作られ、コピー先を変更しても元には影響しません。参照型は同じインスタンスを指す参照が共有されるため、片方を通じた変更がもう片方にも及びます。Swiftでは、データの入れ物としてはまず構造体を検討し、継承や同一インスタンスの共有が必要な場合にクラスを選ぶ、という使い分けがよく推奨されます。
|
struct PointS { var x = 0 } // 値型 class PointC { var x = 0 } // 参照型
var s1 = PointS(); var s2 = s1 // s2 はコピー s2.x = 9 print(s1.x, s2.x) // 0 9(元は変わらない)
let c1 = PointC(); let c2 = c1 // c2 は同じ実体への参照 c2.x = 9 print(c1.x, c2.x) // 9 9(両方変わる) |
つまずきやすい落とし穴
| 注意したいポイント |
|---|
|
よくある質問(FAQ)
Q1. メソッドとプロパティの違いは何ですか?
プロパティはインスタンスが保持する「データ(値)」で、var や let で宣言します。メソッドはそのデータを使った「処理(ふるまい)」で、func で定義します。たとえば「名前」はプロパティ、「鳴く」はメソッド、というイメージです。
Q2. インスタンスを let で作っても、プロパティを書き換えられるのはなぜですか?
クラスは参照型のため、let が固定するのは「どのインスタンスを指すか(参照)」であり、インスタンス内部の var プロパティの値は変更できます。一方、構造体(値型)を let で宣言した場合は、内部のプロパティも変更できません。
Q3. クラスと構造体、どちらを使えばよいですか?
一般的には、まず構造体(struct)の利用を検討し、継承が必要な場合や、複数の箇所で同じインスタンスを共有・変更したい場合にクラスを選ぶ、という基準がよく用いられます。要件に応じて適切な方を選ぶとよいでしょう。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
- print でデバッグ出力
- 変数の宣言
- 定数の宣言
- データ型
- 配列の宣言/追加/削除
- クラスとメソッドの作り方と呼び出し方
- 繰り返し制御
- if文による条件分岐
- エラー一覧
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?