u16suzuの blog

日々学んだことのメモブログです。

swift

例外を投げるclosure

() throws ->(String) in と書くと例外を投げるクロージャを定義できる enum MyError : ErrorType { case Hoge } let c = {() throws ->(String) in throw MyError.Hoge } do { try c() } catch { print( "\(__FUNCTION__): L\(__LINE__)") }

Swiftでクラスからインスタンスを生成する

インスタンス化するクラスを定義 class Hoge { required init(){ } class func newInstance()->Hoge { return Hoge.init() } } 呼び出し let hogeClass: Hoge.Type = Hoge.self let hogeObject = hogeClass.init()

UIWebView でリンクをクリックしたとき safari で開く

UIWebView でリンクをクリックしたとき safari で開く func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool { if(navigationType == UIWebViewNavigationType.LinkClick…

swiftでKVO

監視対象のプロパティに dynamic 修飾子をつける Observer は NSObject を継承している必要がある dynamic var fbNativeAd:FBNativeAd? addObserver(self, forKeyPath: "fbNativeAd", options: [.New, .Old], context: nil) deinit { removeObserver(self, f…

swiftのディープコピー

swift はデフォルトで deep copyになる。 また、引数で受け取ったオブジェクトはletになってて直接加工できない。 そのため、ディープコピーを作ってそれを編集する必要がある。 // swift はデフォルトで deep copyになる let ar = [1,2,3,4] var ar2 = ar ar2.in…

swiftの filter メソッドを使ってみた

0から100の範囲で10で割り切れる値を得る print( (Array<Int>)(0...100).filter({$0 % 10 == 0}) ) // => [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100]</int>

swiftのジェネリクスを使ってみる

// ジェネリクス関数 func swapAnyObject<T>(a:T, b:T){ print( a.dynamicType, b.dynamicType) } // ジェネリクス関数その2 // http://qiita.com/mini_house/items/73cefa9612d5c7680d7e より func myRepeat<ItemType>(item: ItemType, times: Int) -> [ItemType]{ var r</itemtype></t>…

swift でシングルトンクラスをつくってみる

シングルトンクラスの定義 遅延実行で生成するパターン import Foundation class NetworkErrorAlertControllerManager : NSObject { static var sharedManager: NetworkErrorAlertControllerManager = { return NetworkErrorAlertControllerManager() }() ov…

ContainerViewController のスニペット

import UIKit class ParentViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() } // コンテナビューコントローラに追加 func addViewController(vc: UIViewController){ self.addChildViewController(vc) vc.view.frame…

開発時のみ実行するコードを実現するマクロ

微妙に objc の時と変わった。 毎回、手でやるのがたいへんな画面操作を、自動でやりたいときなどに、この中に組み込んでいたりする。 #if DEBUG // こんなかんじで、 画面遷移を自動でさせちゃう。 let vc = EntryViewController.instantiateFromStoryboard() vc.e…

swiftのコピペコード置き場

UILabel 開発中のデバッグでたまにコードで置いちゃう。 let label = UILabel.init(frame: CGRectMake(0, 100, 0, 0)) label.text = "Test Label" label.sizeToFit() view.addSubview(label) イニシャライザの UILabel.init(frame: frame) は UILabel(frame: …

Swift で enumを定義する

以下のように enum で環境を定義して、そこにAPIのBase URLを持たせることをよくする。 enum Env: Int { case Local case Staging case Production func baseURL() -> String { switch(self) { case .Local: return "http://localhost:3000" case .Staging: re…

swiftでテーブルビューの delegate と datasource を書く

// MARK: - UITableViewDelegate func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { tableView.deselectRowAtIndexPath(indexPath, animated: true) } // MARK: - UITableViewDataSource func tableView(tableView…