3日で勉強したxcode + swift殴り書き

結論: http://docs.fabo.io/swift/ 逆引き最強説。

セグエ

今のViewControllerから次のViewControllerへ遷移すること。 遷移する部分。

ナビゲーションコントローラー

メニューバーのEditor > Emmed > navigationControllerで追加 すると、セグエした後に、上にナビゲーションが追加される。

xcode ショートカット

Cmd + R run
Cmd + B build
Cmd + . stop

新規でviewControllerを作った際に、ついでにスクリプトファイルも作る方法

1 ストーリーボードを開き、右下のUIアイテムからView Controllerをドラッグ&ドロップ
2 backgroundをてきとうな色に変更。
3 Is Initial View Controllerにチェックを入れ、スタート画面にする。
4 メニュー > File > New > File > Cocoa Touch Class
Class: Scene1ViewController
Subclass of: UIViewController
に設定。
5 右上の?アイコンのとなりのアイコンをクリック > Custom class > Scene1ViewController
これでScene2ViewControllerファイルにUIをドラッグ&ドロップできるようになる。

UIアイテムをソースコードに追加した後に削除するとNSExceptionエラー

http://hajihaji-lemon.com/smartphone/swift/connection_inspector/

http://easyramble.com/nsunknownkeyexception-by-removing-outlet.html

swiftからobjective-cのコードを実行する。

http://tech.admax.ninja/2014/09/26/about-bridging-header/
表示用のラベルを追加し、
ViewControllerにoutletでドラッグ&ドロップ

メニュー > File > New > File > Cocoa Touch class
Class: Cat
sub class of: NSObject
Language: Objective-C

Bridging-Header作成のダイアログが出るのでCreate。
使用するObjective-Cをimport

// xxxxx-Bridging-header.h
#ifndef Bridging_Header_h
#define Bridging_Header_h

#import "Cat.h"

#endif
// Cat.h
#import <Fondation/Foudation.h>

@interface Cat : NSObject
@property (nonatomic, copy) NSString *name;
- (id)initWithName:(NSString *)name;
- (NSString *)greeting;
@end
// Cat.m
@implementation Cat
- (id)initwithName:(NSString *)name
{
    self = [super init];
    if (self) {
        self.name = name;
    }
    return self;
}
- (NSString *)greeting
{
    return [NSString stringWithFormat:@"Hello %@", self.name];
}
@end
// ViewController.swift
import UIKit

class ViewController: UIViewController {
    @IBOutlet weak var label: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()

        let obj: Cat = Cat(name: "CAT!")
        label.text = obj.greeting()
    }
}

https://ics.media/entry/6439

// table list

import UIKit

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    @IBOutlet weak var table: UITableView!

    let fruits = ["りんご", "みかん", "ぶどう"]
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    // セルを作る
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
      let cell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "MyCell", for: indexPath)
      cell.textLabel!.text = fruits[indexPath.row]
      return cell
    }
    // セルの数
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
      return fruits.count
    }
    // セルがタップされた時の処理
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        print("セル番号:\(indexPath.row) セルの内容:\(fruits[indexPath.row])")
    }
    // セルの高さを設定
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
      return 64
    }
}

コード書いてる時に思ったこ

あってる間違っているとか気にせず、とにかく書く

書いていけばあとからわかるから。

コードは折りたため!

https://teratail.com/questions/17569
クラス書いたらと折りたたむ。
ブレークポイントと折りたたみがかぶる問題が発生。
ブレークポイントを全削除する。

vimキーバインド設定がめんどくさそう

xcodeのフォルダをsublimetextにdrag & dropして
もはやsublimetextでキーバインドvim設定にして
sublimeで作業すればおk。

適当に機能を試したい

http://docs.fabo.io/swift/
逆引きから適当に追加していくだけで、なんとなくできあがる。

即時関数使うとコンパクトに見える

class ViewController {
    private var text_filed: UITextField!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        print("View Controller2")
        
        // ココ!
        text_filed = {
            let w: CGFloat = 200
            let h: CGFloat = 50
            
            let rect = CGRect(
                x: (self.view.bounds.width - w) / 2,
                y: (self.view.bounds.height - h) / 2,
                width: w,
                height: h
            )
            
            return UITextField(frame: rect)
        }()

        // 表示するテキスト
        text_filed.text = "Hello TextField"
        // Delegateを自身に設定する
        text_filed.delegate = self
        // 枠を表示する
        text_filed.borderStyle = .roundedRect
        // クリアボタンを追加
        text_filed.clearButtonMode = .whileEditing
        
        // viewに追加
        self.view.addSubview(text_filed)
    }
}