LoginSignup
9
7

More than 5 years have passed since last update.

Swiftまとめ - struct(構造体)-

Last updated at Posted at 2014-12-20

用途

クラスと同じようにプロパティ、メソッドを定義できる。

struct User {
  var name: String

  func hello(){
      print("Hello," + name)
  }
}

var user: User = User(name: "太郎")
user.hello() // => "Hello,太郎"

クラスとの違い

  • structはinitメソッドがいらない。(書いても良い)

クラスで同じことをする場合は次のようになる。

class User {
    var name: String

    init(name: String){
        self.name = name
    }

    func hello(){
        print("Hello," + name)
    }
}

var user: User = User(name: "太郎")
user.hello()
  • structは参照型ではない

structをコピーして2つの値を比較してみる。

struct User {
  var name: String
}

var user: User = User(name: "太郎")
var user2: User = user
user2.name = "次郎"

println(user.name)   // => "太郎"
println(user2.name)  // => "次郎"

両方とも違う値が出力される。

次に、クラスで同じことをやってみる。

class User {
  var name: String

  init(name: String){
    self.name = name
  }  
}

var user: User = User(name: "太郎")
var user2: User = user
user2.name = "次郎"

println(user.name)   // => "次郎"
println(user2.name)  // => "次郎"

オブジェクトはコピーしても同じ値を参照し続けているので、2つとも同じ値が出力される。

応用として、structは値なので、クラスのインスタンス変数として使用することができる。プロパティをまとめたい、などの場合に組み合わせて使うと便利。

struct Bookshelf {
  var width: Int
  var height: Int
}

struct Desk {
  var width: Int
  var height: Int
}

class Room {
  var bookshelf: Bookshelf
  var desk: Desk

  init(bookshelf: Bookshelf, desk: Desk){
    self.bookshelf = bookshelf
    self.desk = desk
  }
}

var bookshelf: Bookshelf = Bookshelf(width: 80, height: 120)
var desk: Desk = Desk(width: 60, height: 70)

var room: Room = Room(bookshelf: bookshelf, desk: desk)

print(room.desk.width) // => 60
  • structは継承できない
9
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
7