Swift
Swift3.0

Swift雑多メモ

ついにSwift、はじめてみた。ううぇー
当方の経験言語は、ActionScript3、C、C++、C#、JS。
2系と3系の谷にもがき苦しむ様をお楽しみ下さい。

デリゲート

Swiftに限った話じゃないけど。
オブジェクト思考のためのデザインパターンのひとつ。

「あるクラスは、他のクラスのインスタンスに、処理を任せることができる。」というようなこと。

playground
// プロトコルを作る。
protocol Mochi {
    func sayHello() -> String
}

// 依頼人クラス
class Hoge {

    // ここで、プロトコルに従うクラスのインスタンスを用意する。
    var delegate: Mochi!
    func say() -> String {
        return delegate.sayHello()
    }
}

// 代理人クラス。クラスの後ろにプロトコルを書く。
class Piyo: Mochi {
    func sayHello() -> String {
        return "Hello, Piyopiyo"
    }
}

let hoge = Hoge()
let piyo = Piyo()
hoge.delegate = piyo    // 代理人を指定。
hoge.say()    // "Hello, Piyopiyo"

Delegateを使う最大のメリットは、対象となるクラスが「何を委譲するか」をプロトコルとして定めることで、「誰に委譲するか」をまったく意識せずに設計できる点です。

プロトコルとデリゲートのとても簡単なサンプルについて

nil

nullのこと。

コメントより、

一般的に変数を定義した時に、値を入れる前はnullになるようになっているので、空の状態とみなせますが、どちらかと言うと、nilは「空である」という状態を表す値です。

変数にはなにかしら値がはいっている、ということか。
たしかにNullエラーとか、むなしいもんなぁ(遠い目)

"!" と "?"

オプショナル型というものらしい。
その変数にnilが入る可能性がある場合は型の後ろに!か?をつける。

コメントより、

Int?Optional<Int> のシンタックスシュガーです。

どこよりも分かりやすいSwiftの"?"と"!"
SwiftのOptional型を極める

UIColor

16進数で打ち込むときは以下のよう。

UIColor
UIColor(rgba: 0xFF00EEFF)

Xcode8から使えるようになったというColor Literalがかわいい。

Swift3以降のUIColorの使い方

Closure

無名関数。クロージャ。

[Swift] Closureの書き方いろいろ

as!

キャストには変わりないんだけど保険?がかけられるぽい。

as:キャストが成功すると保証されるときに使用(アップキャストなど)
as!:強制ダウンキャストの際に使用
as?:ダウンキャストが成功するか分からない場合に使用(失敗すると戻り値はnil)

Swift as!について

collectionViewからcollectionViewCellを参照

let cell = collectionView.cellForItem(at: indexPath) as! CalendarCell

関数へのアクセス

なにもつけないとinternal扱いになる

public: 同じモジュール内だけでなく、別のモジュールからでもアクセスできる
internal: 同じモジュール内からのみアクセスできる
private: 同じソースファイル内からのみアクセスできる

Swift 3からのアクセスコントロール