ついにSwift、はじめてみた。ううぇー
当方の経験言語は、ActionScript3、C、C++、C#、JS。
2系と3系の谷にもがき苦しむ様をお楽しみ下さい。
デリゲート
Swiftに限った話じゃないけど。
オブジェクト思考のためのデザインパターンのひとつ。
「あるクラスは、他のクラスのインスタンスに、処理を任せることができる。」というようなこと。
// プロトコルを作る。
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(rgba: 0xFF00EEFF)
Xcode8から使えるようになったというColor Literalがかわいい。
Closure
無名関数。クロージャ。
as!
キャストには変わりないんだけど保険?がかけられるぽい。
as:キャストが成功すると保証されるときに使用(アップキャストなど)
as!:強制ダウンキャストの際に使用
as?:ダウンキャストが成功するか分からない場合に使用(失敗すると戻り値はnil)
collectionViewからcollectionViewCellを参照
let cell = collectionView.cellForItem(at: indexPath) as! CalendarCell
関数へのアクセス
なにもつけないとinternal扱いになる
public: 同じモジュール内だけでなく、別のモジュールからでもアクセスできる
internal: 同じモジュール内からのみアクセスできる
private: 同じソースファイル内からのみアクセスできる