MENU

【Swift入門】structとは?初心者でもわかる構造体の基礎と使い方

Swiftでアプリ開発を始めたばかりの方は、「struct」という言葉を見かけて戸惑うことがあるかもしれません。この記事では、Swiftのstructについて、プログラミング初心者の方にもわかりやすく解説します。

目次

Swiftのstructとは?

structは「構造体(こうぞうたい)」の略で、関連するデータをひとまとめにして扱うための仕組みです。

例えば、人の情報を扱う場合、名前と年齢を別々の変数で管理するよりも、「Person」という1つのstructにまとめた方が便利です。

// バラバラに管理する場合
var personName = "太郎"
var personAge = 25

// structでまとめる場合
struct Person {
    var name: String
    var age: Int
}

structの基本的な書き方

structは以下のような構文で定義します。

struct 構造体名 {
    var プロパティ名: 型
    // 必要に応じてメソッドも定義できる
}

実際の例を見てみましょう。

struct Book {
    var title: String
    var author: String
    var price: Int
    
    func displayInfo() {
        print("『\(title)』著者:\(author)、価格:\(price)円")
    }
}

// 使用例
let myBook = Book(title: "Swiftプログラミング入門", author: "山田太郎", price: 3000)
myBook.displayInfo()
// 出力:『Swiftプログラミング入門』著者:山田太郎、価格:3000円

structの3つの特徴

1. 値型である

structは「値型」です。これは、変数に代入したりコピーしたりすると、データが複製されるという意味です。

struct Point {
    var x: Int
    var y: Int
}

var point1 = Point(x: 10, y: 20)
var point2 = point1  // コピーが作られる

point2.x = 50

print(point1.x)  // 10(変更されていない)
print(point2.x)  // 50

この例では、point2を変更してもpoint1には影響しません。これが値型の特徴です。

2. プロパティとメソッドを持てる

structには、データ(プロパティ)と、そのデータを操作する機能(メソッド)の両方を定義できます。

struct Rectangle {
    var width: Double
    var height: Double
    
    // 面積を計算するメソッド
    func area() -> Double {
        return width * height
    }
    
    // 周囲の長さを計算するメソッド
    func perimeter() -> Double {
        return (width + height) * 2
    }
}

let rect = Rectangle(width: 5.0, height: 3.0)
print("面積:\(rect.area())")        // 面積:15.0
print("周囲:\(rect.perimeter())")   // 周囲:16.0

3. 自動的にイニシャライザが生成される

structは、全てのプロパティを初期化するための「メンバーワイズイニシャライザ」が自動的に生成されます。

struct User {
    var username: String
    var email: String
}

// 自動的に生成されるイニシャライザを使用
let user = User(username: "swift_lover", email: "swift@example.com")

structとclassの違い

Swiftには、structと似た機能を持つ「class」もあります。初心者の方は、どちらを使うべきか迷うかもしれません。

特徴structclass
値型(コピーされる)参照型(参照が渡される)
継承できないできる
使い分けシンプルなデータモデル複雑なオブジェクト、継承が必要な場合

どちらを使うべき?

Appleの公式ガイドラインでは、以下のような推奨があります。

  • structを使う場合:シンプルなデータの集まり、等価性の比較が重要な場合
  • classを使う場合:継承が必要、アイデンティティ(同一性)の管理が必要な場合

迷ったら、まずはstructから始めることをおすすめします。

実践的なstructの使用例

例1:商品情報の管理

struct Product {
    var id: Int
    var name: String
    var price: Int
    var inStock: Bool
    
    func displayStatus() {
        let status = inStock ? "在庫あり" : "在庫なし"
        print("\(name)(¥\(price))- \(status)")
    }
}

let product = Product(id: 1, name: "Swiftプログラミング本", price: 3500, inStock: true)
product.displayStatus()
// 出力:Swiftプログラミング本(¥3500)- 在庫あり

例2:座標の計算

struct Coordinate {
    var latitude: Double
    var longitude: Double
    
    func distanceTo(_ other: Coordinate) -> String {
        // 簡易的な距離計算の例
        let latDiff = abs(latitude - other.latitude)
        let lonDiff = abs(longitude - other.longitude)
        return "緯度差:\(latDiff)、経度差:\(lonDiff)"
    }
}

let tokyo = Coordinate(latitude: 35.6762, longitude: 139.6503)
let osaka = Coordinate(latitude: 34.6937, longitude: 135.5023)
print(tokyo.distanceTo(osaka))

structを使うメリット

  1. コードの可読性が向上する:関連するデータをまとめることで、コードが整理されます
  2. 安全性が高い:値型なので、予期しない変更から保護されます
  3. パフォーマンスが良い:多くの場合、classよりも高速に動作します
  4. スレッドセーフ:コピーが作られるため、マルチスレッド環境でも安全です

まとめ

Swiftのstructは、関連するデータをまとめて扱うための強力な機能です。以下のポイントを覚えておきましょう。

  • structは値型で、コピーされる
  • プロパティとメソッドを持てる
  • 自動的にイニシャライザが生成される
  • シンプルなデータモデルにはstructを使う
  • 迷ったらまずstructから始める

structをマスターすることで、より読みやすく保守しやすいSwiftコードが書けるようになります。ぜひ実際のコードで試してみてください。

プログラミングの独学におすすめ
プログラミング言語の人気オンラインコース
独学でプログラミングを学習している方で、エラーなどが発生して効率よく勉強ができないと悩む方は多いはず。Udemyは、プロの講師が動画で実際のプログラムを動かしながら教えてくれるオンライン講座です。講座の価格は、セール期間中には専門書籍を1冊買うよりも安く済むことが多いです。新しく学びたいプログラミング言語がある方は、ぜひUdemyでオンライン講座を探してみてください。
目次