LoginSignup
74
69

More than 5 years have passed since last update.

Swiftに関するメモ その3 - プロパティの監視・メソッドなど

Last updated at Posted at 2014-06-04

https://developer.apple.com/swift/ より

The Swift Programming Language (iBooks Store)をざっくり目を通してつらつらと。

プロパティの監視 (willSetdidSet)

Objective-C でいうところの KVO (Key-Value-Observing) のような位置づけになるんでしょうか、プロパティに対して、willSetdidSet というオブザーバーを設定することができます。

struct SomeClass {
  var value: Int {
  willSet {
    // value がセットする前に呼ばれる
  }
  didSet {
    // value がセットされた直後に呼ばれる
  }
  }
}

メソッド

インスタンスメソッド

基本形:

class SomeClass {
  func doSomething() {
    // なんかする
  }
}

classstruct の中で宣言された func。呼び出しはインスタンスに . を付けて。

インスタンスメソッドの中で self はインスタンス自身を指します。Objective-C の self、JavaScript での this と一緒。

class SomeClass {
  var value = 0
  func doSomething() {
    self.value // value プロパティにアクセス
    // なんかする
  }
}

この例だと self.value としていますが、self を省略して value とだけ書いても (ローカルに同一な変数名などがなければ) 同じ意味になります。

ただ、コードの読みやすさを考えると、インスタンスのプロパティやメソッドにアクセスする場合には都度 self を付けたほうがよいと思います。

値渡し型のインスタンスに対する mutating メソッド

structenum などは値渡し型のオブジェクトで、通常インスタンスメソッドでインスタンスのプロパティを変更することはできません。

メソッド内でインスタンスプロパティを変更する際には、そのメソッドを mutating として宣言する必要があります。

struct SomeStructure {
  var value = 0
  mutating func doSomething() {
    self.value = .... // value プロパティを変えるので、mutating が必要
  }
}

タイプメソッド - クラスメソッド / 静的メソッド

プロパティにタイププロパティがあるようにメソッドにもタイプメソッドがあります。

class SomeClass {
  class func doSomething() {
    // なんかする
  }
}
struct SomeStructure {
  static func doSomething() {
    // なんかする
  }
}

添字アクセス (Subscripts)

サブスクリプト (subscript) は配列などであるような some[0] という [] の添字でアクセスできるようにした仕組みです。これによってあたかも配列やディクショナリのように動作するオブジェクトを作ることができます。

class ArrayishClass {
  subscript(index: Int) {
    get {
      // arrayish[i] で呼ばれる
      return ....
    }
    set(newValue) {
      // arrayish[i] = newValue で呼ばれる
    }
  }
}

getset を省略して read-only にできるのはプロパティの作法と一緒。

class ArrayishClass {
  subscript(index: Int) {
    // arrayish[i] で呼ばれる
  }
}
74
69
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
74
69