swift1日目
今までswiftから逃げまわってきた人ですが、
先日先輩からswiftの書籍をもらったので、勉強メモ。
C言語わかる、Obj-Cもかじっている程度なら全然分かるメモかと思います。
swiftやる前にPlayground
その名の通り、swiftプログラムの遊び場、実験場。
テキストエディタでswiftコードを書くと実行結果を表示する。
Xcodeにあるの知らなかったぜ...
Playgroundファイル作成
[File]→[New]→[Playground...]でつくる。
変数宣言
var 変数: 型
// 例 var num: Int num = 3 // 初期化 var num2: Int = 0 // 型推論 var num3 = 0.5 // 少数で初期化しているからDoubleと推論
慣れない('A`)
まずここから慣れるの時間かかるな...
定数宣言
let 定数: 型 = 値
定数は初期値が必要
// 定数宣言 let pi = 3.141592 //OK pi = 3.1 //エラー(変数ちゃうで) let root2: Double //エラー(初期値ないよ)
文字列
// 文字列 var emptyString = String() // 空文字 var num1 = 1 var calcString = "1 + 1 = \(num1 + num1)" // 文字列補間
文字コード→文字をつくる
// 「\u{文字コード}」で記述 let faceChar = "\u{1f617}" // 😗
letで宣言すればNSString, varで宣言すればNSMutableString
なるほど。わかりやすい。
配列
// 配列 var year = [2010, 2011, 2012, 2013, 2014, 2015] // 配列の型を明示的にする // var 変数名:[型] = [要素, 要素, 要素] var 都道府県:[String] = ["東京都", "京都府", "沖縄県"] //空配列 (どの書き方でもいいよ) var emptyArray = [String]() var emptyArray2: [String] = Array() // 配列の型推論 var emptyArray3 = []
辞書
// 辞書 var address = ["都道府県" : "東京都", "市区町村" : "渋谷区"] // キー指定で値を引っ張る var prefecture = address["都道府県"] // 辞書の明示的型宣言 // var 変数名 = Dictionary<キーの型, 値の型>() var emptyDict2 = Dictionary<String, String>() // var 変数名 = [ キーの型 : 値の型 ] var emptyDict3 = [Int:String]() // 辞書の型推論 var emptyDict4 = [:]
NSArray と NSDictionary
- NSArray ≠ Array
- NSDictionary ≠ Dictionary
import Foundation // Swiftの辞書作成 var dict = ["key": "value"] // NSDictionary型の辞書として生成 var nsdict = dict as NSDictionary
関数
/* func 関数名(引数名:引数型) -> 戻り値型 { 処理 return 戻り値 } */ func func1(x: Int) -> Int { return x + 7 } func1(3) // 10 func1(2) // 9
クロージャ
ああ、Blocksのことですか。
/* クロージャ { (引数名, ...) -> 戻り値型 in // 処理 // return 戻り値 } */ // hoge関数の定義 func hoge(handler:(String, String, String) -> Int) { var hoge1 = "hage1" var hoge2 = "hage2" var hoge3 = "hage3" handler(hoge1, hoge2, hoge3) } // hoge関数を呼び出す hoge({(hoge1 ,hoge2, hoge3) -> Int in println(hoge1) return 0 })
上記の例文でやっていることは
クラスと構造体の使い分け
- 大量にインスタンスを確保、破棄するもの → 構造体
- たくさんの情報を持っている、ライフタイムが長いもの → クラス
プロパティ
保持プロパティ
クラス、構造体の中で変数の形で宣言されているもの。
よく見てきたプロパティ。
算出プロパティ
変数を持たず、プロパティにアクセスするメソッドを用意して計算を行うもの。¥
struct Rect { // 保持プロパティ var x: Float = 0 var y: Float = 0 var width: Float = 0 var height: Float = 0 // 算出プロパティ var centerX: Float { get { return x + width * 0.5 } set (centerX) { x = centerX - width * 0.5 } } }
プロパティ変更時に別のプロパティも変わらないといけない場合は、算出プロパティにしておけばいちいち全てのプロパティの変更処理書かなくていいから楽ね。
メソッド
タイプメソッド
Obj-Cでいうクラスメソッドのことかな。
- 構造体のタイプメソッドはfuncの前に "static" をつける
- クラスのタイプメソッドはfuncの前に "class" をつける
Optional型
Any
なんでも指定できる。Any型の配列ならなんの型でもオーライ
var anyArray = [Any]() anyArray.append(0) // 整数 anyArray.append(1.234) // 小数 anyArray.append("hoge") // 文字列
AnyObject
id型とおんなじイメージ
ラップやらアンラップやら
- ラップされてる状態 → オブジェクトが、正当なものかもしれないし、nilかもしれない状態。
- アンラップする → どんなオブジェクト化を確定する。
ここは、もうちょっと勉強してからメモろう。
MetaType
オブジェクトの型
objective-cではオブジェクトのクラス名欲しい時に
Class objectType = [SomeClass class];
ってやってたけど、swiftでは
var objectType = SomeClass.self
感想
('A`)慣れねえ。(2回目)
Playgroundで試しながらの勉強なんで、理解度はいつもより早いんだけどね。
実際にサンプルプログラム書きがてら学ぼう...