🧊

Swiftに入門してみたメモ

べ、別に鞍替えとかそういうのじゃないんだからね!
時間かけてなんかやったなら、その記録を残そうという趣旨でございます。

はじめに

プログラミングというものに関する私のスキルセットは以下です。

  • 前の会社で3ヶ月Javaやってたけど忘れたしあんなもんはノーカン
  • よってJavaScriptからプログラミング道に入門
  • JavaScriptをよく書くようになってやっと2年過ぎた
  • Perlを業務上わりとよく見る/ちょっとだけ書く
  • Ruby/PHPならコピペでならなんか作れる

というような感じなので、ことプログラミングの根源たる部分に関しては見当違いのこととか多数あると思います。
なんかあったら教えてくださいまし。

Swift

とりあえずTodoApp作りました。

  • ヘッダとリストで構成されてて
  • ヘッダの新規追加ボタンから新規追加ができて
  • リストをスワイプすると編集と削除ができて
  • データがアプリ側に保存できる

そういうThe TodoAppを。
てか以下のサイトのやつです。

参考:作って学ぶSwift/iOSアプリ入門Camphor- Tech Blog | Camphor- Tech Blog

大変勉強になりました!

さて本題。
以下、むってなったものやなるほどーってなったものたち。

let

ES6でもletってのは使えますが、このletはまた少し違う。
厳密に同じかはわからんけど、いわゆるconstと同じで「再定義しない変数」に使う。

まぎらわし・・。

型付けできる

var count: Int = 1
let name: String = "Swift"
let arr: [String] = ["foo", "bar"]

出ましたJavaScriptしか知らん人泣かせの概念!
とはいえそんなに難しいものじゃない + むしろありがたいと感じる今日このごろ。

指定しなくても動的に型付けしてくれるらしいけど、
これはもう片っ端から付けるようクセにしたほうがいい気がする。

Dictionary

オブジェクトでやりたいことをやる時に使う感じ?
でも型で縛って使うので、定数オブジェクトみたいな用途にしか使えないかも。

まあなんでもできちゃうjsが特殊なんかね・・。

var langDict: [String:String] = [
  "ruby": "るびー",
  "js":   "ジャッヴァスクリプト"
]

{} じゃなくて [] っていう!!

タプル

新たな概念や。

let name: (first: String, last: String) = (first: "Lea", last: "der22")
let res: (min: Int, max: Int, sum: Int) = (min: 1, max: 5, sum: 20)

こういう組み合わせの内容がくるってのを定義できるのね。

シングルクオート使わない

// let name = 'これダメ'
let name = "これOK"

これは中々に衝撃でした。
ダブルクオートなんか使うんじゃねえ!って言われて育った身としては!

セミコロンも括弧もいらない

if hoge > 10 {
  println("Over 10!")
}

これも慣れの問題でしょうがだいぶ違和感が・・・。

for inで配列まわせる

// まわせる!
for word in ["hoge", "fuga", "piyo"] {}

// indexほしいとき
for (index, word) in enumerate(["hoge", "fuga", "piyo"]) {}

そんなことが・・。
ちなみにDictionaryも回せるらしい。

Optional

型の後ろに ? つけるやつ。
これをしないと、nil(nullじゃない!)を代入できない。

var num: Int? = 1
num = nil // ok
num!++ // ただし ! つけないと元の型として使えない

そして使うときは ! つけないといけない。
いかにJavaScriptがなんでもアリの世界やったかを味わっています。

巻き上げとかない

functionとは違うのだよ!

// エラーになる
// println(getA())

func getA() -> String {
  return "A"
}
println(getA())

まあ、そんな書き方する機会ないんやろけど。

ArrowFunctionではない

このペースでメモってるとキリない気がしてきた。

// -> は戻り値の型を書いてる
func getA() -> String {
  return "A"
}

// 何も返らないやーつ
func say(message: String) -> Void {
  println(message)
}

newとかいらない

いらないんですって。

Enum

どっかで見た・・・TypeScript?

enum Suit {
  // case で定義してく
  case Spades, Hearts, Diamonds, Clubs

  func desc() -> String {
    switch self {
    // 使うときドットつける
    case .Spades