Shoken Startup Blog

KitchHike Founder/CTO

Swiftでpublic/privateなどのアクセスコントロールについて他

今日得たSwiftの知識

public/privateなどのアクセスコントロールはまだ実装されてない

Apple Developer Forumsのスレッドで、もうすぐ実装されると書いてある。

Does Swift have access modifiers? - Stack Overflow

Rangeの仕様がRubyと逆

for i in 1..3 {
  print( i )
}
// => 12

for i in 1...3 {
  print( i )
}
// => 123

Rubyと逆。

プロパティの監視ができる

willset, didSetというものがあって、それぞれプロパティに"値を入れる前"、"値を入れた後"の処理を記述できる。 また、didSetの中でoldValueという変数で直前の値を参照できる。

class ExampleClass {
    var counter: Int {
        willSet {
            println("willSet")
        }
        didSet {
            println("didSet")
            println("old counter = \(oldValue)")
            println("current counter = \(counter)")
        }
    }
    init(counter: Int) {
        // 初期化時は呼ばれない
       self.counter = 0
    }
}

Computed Propertiesではプロパティ宣言と同時にgetter, setterが定義できる

class ExampleClass {
    var base = 0
    var counter: Int {
        get {
            return base + 1
        }
        set {
            base += 1
        }
    }
}

getterのみの場合、returnだけ書けば良い。

class ExampleClass {
    var base = 0
    var counter: Int {
            return base + 1
    }
}

すべてのプロパティに初期値が設定されている場合はイニシャライザを省略可能

The Swift Programming Language: Initialization

Swiftでカリー化した関数を書くことができる

Swift - Trailing Closures and Curried function - Qiita