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() } }
// 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) } }