Swift初学者のSwift学習ログ(書籍:本気ではじめるiPhoneアプリ作り)
形式
基本的に詰まった順に列挙。
xcode最新版(9.0)と参考書で使用されているバージョン(8系)との違い
- ナビゲーションバーにsource control navegatorが追加
Apple、「Xcode 9」正式版をリリース
- New Source Control navigator and integrated GitHub accounts make it easy to manage code across a team
githubと連携させないので業務では必要ない。 必要なら以下参照 Xcodeの概要: ソースコード管理機能を使う
editorのdocument outlineが見当たらない
項目によってあったりなかったりするだけだった。 ただ、メニューバーにあったshow document outlineは項目が消えていた。
実機接続のテストでiPhoneの設定からプロファイルとデバイス管理がない
プロファイルのみになっている。
xcodeで実機の利用ができない(0xE80000E2) - Qiita
を参考に解決。
Optional型の変数を定義した後にアンラップ処理後の変数を利用しない場合の表現がある理由。
厳格なSwiftに対して返り値がなくても問題ないということを宣言するため。
どこよりも分かりやすいSwiftの"?"と"!" - Qiita
enum型が初見でしっくりこなかった
列挙型
// enumの定義 enum Fluit { case Apple case Orange } // Switch文の値にenum値を指定するとenumの値がすべて網羅されているかチェックが入る。処理の記述漏れ対策に良い。 let value = Fluit.Orange switch value { case .Apple: print("Appleです") case .Orange: print("Orangeです") }
Clusure、無名関数について
意味のわからないかたまりに見えた。
{(引数:引数の型) -> (戻り値の型) in // 処理 return 戻り値 }
こんなの。Rubyでの記法のProcやラムダと比較しながら理解した。
Swift さくっと確認したい基礎文法 [クロージャ(closure)] - Qiita
特徴と考え方を理解
エラーが起きた箇所を表示させたい
エラーの画面が意味不明。 thread logのみが表示され見辛い。
何かしらの設定を弄ってしまった可能性あり
// Xcodeの設定(カラースキームとかプロジェクトとか)がリセットされるので注意。 defaults delete com.apple.dt.Xcode.LSSharedFileList defaults delete com.apple.dt.Xcode
をターミナルで実行して解決
同じ症状の人 xcode - Thread 1: Stopped at breakpoint 1 - Stack Overflow
Xcodeでコード補完が効かなくなった時に… - Qiita
Auto LayoutのUpdateFramesがadd New Constratintsにない
同じ所にボタンとしてupdateframesがある。 ただクリックできない items of new constraintsを設定出来ないがそれは大丈夫なのか
Type 'ViewController' does not conform to protocol 'UITableViewDataSource'が解決出来ない。
// テーブルの行数を返却する func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { // Todoの配列の長さを返却する return todoList.count } // テーブルの行ごとのセルを返却する func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { // Storyboardで指定したtodoCell識別子を利用して再利用可能なセルを取得する let cell = tableView.dequeueReusableCell(withIdentifier: "todoCell", for: indexPath) // 行番号に会ったToDoのタイトルを取得 let todoTitle = todoList[indexPath.row] // セルのラベルにToDoのタイトルをセット cell.textLabel?.text = todoTitle return cell }
2つのメソッドがボタン押した時のメソッドに入っていたのが問題だった。
Storyboardの制約を使いこなせない
Scrapboxに書いた。 scrapbox.io
参考 StoryboardのAutolayoutの基本 iOSのAuto Layout - Qiita