t__nabe_log

雑多 作業、学習ログ多め。

Swift初学者のSwift学習ログ(書籍:本気ではじめるiPhoneアプリ作り)

形式

基本的に詰まった順に列挙。

xcode最新版(9.0)と参考書で使用されているバージョン(8系)との違い

githubと連携させないので業務では必要ない。 必要なら以下参照 Xcodeの概要: ソースコード管理機能を使う

editorのdocument outlineが見当たらない

項目によってあったりなかったりするだけだった。 ただ、メニューバーにあったshow document outlineは項目が消えていた。

実機接続のテストでiPhoneの設定からプロファイルとデバイス管理がない

プロファイルのみになっている。

xcodeで実機の利用ができない(0xE80000E2) - Qiita

Xcode9で実機でのアプリが実行できないとき

を参考に解決。

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