Swift4

配列の要素を一意にする

RubyでいうところのArray#uniqみたいなもの let array = [1, 1, 2, 4, 1, 3, 2] array.enumerated().compactMap({ index, item in array.index(of: item) == index ? item : nil }) それぞれの「index」と「arrayからindex(of:) で取得したindex」が一致した…

Closureの即時実行を使ったスコープの切り分け

Swiftのletはimmutableな変数宣言で、一度値を入れたらその後に変更することができない。 let hoge = "hoge" hoge = "fuga" // コンパイルエラー これは変数宣言のときに値を入れないといけない、という制限ではなく、その変数が使われるまでに値が入ってい…

forEachでインデックスを使いたい

配列をすべて舐めるような処理をする時はforEachを使うけど、この時indexを使うことができない let array = ["a", "b", "c", "d"] array.forEach { string in debugPrint(string) } そんなときはArray#enumerated() を使えばindexも使うことができる enumera…

UITextFieldで入力文字を制限する

UITextFieldDelegate を使う textField(_:shouldChangeCharactersIn:replacementString:) - UITextFieldDelegate | Apple Developer Documentation 例えばIntにパースできる値だけにしたければ、次のようなコードになる class ViewController: UIViewControl…