Koichi Adachi

smart phone app development tips

Swift convert Dictionary<Int,AnyObject> to Dictionary<HogeType,AnyObject>

@objc public enum HogeType:Int{ case unknown case hoge1 case hoge2 case hoge3 case hoge4 case hoge5 } class A{ } bucket brigade let convertedDict = [1:A(), 2:A(), 100:A()].reduce([HogeType:A]()){ guard let controlType = HogeType(rawValue: …

pass a enum key Dictionary to Swift from ObjC

expect receive enum-key dict (Dictionary<EnumType,T>) from Objective-C. but can't receive direct EnumType key because XCode abandon generate method. ObjC's NSDictionary not allow Int for key. to use instead of NSNumber. definition in swift @objc publi</enumtype,t>…

Android Studio v2.2.3

Android Studio v2.2.3が出た。 Android Studio Release Notes | Android Studio 2.2との大きな違いは ProGuardで変換した内容がおかしいため、バージョンをProGuard 5.3.1から 5.2.1に戻した。(superの代わりにthisになっていた問題の解消) ProGuard Java…

自作ライブラリをシームレスにObjCからSwiftへ移行する話(iOS Advent Calendar 2016/12/15)

これまでObjCで書いていたライブラリを'少しずつ'Swiftに移行する話です。 # このトピックで実現すること - 既存ライブラリ(ObjC)のプロジェクトはそのまま残す。 - Swiftで書きたい(移行したい)ロジックから新規ライブラリプロジェクトに記述(移動)する…

SwiftでHogehoge.frameworkを作る

Xcode8betaが出たので、気になっていた「Swiftでコードを書いて.frameworkを作ることができるのか」を試してみました。 結論からいうとできるみたい。 検証したこと DeploymentTargetはXcode8.0betaの下限のバージョンであるiOS8.0を指定。 Swiftで書いたラ…

Scala defの引数にクラスを指定する

noneだったら指定のエラーのLeftに入れて返すメソッドを作った時に、classを渡せないかなーと思い、こんな風に書いてみた。 このメソッドは作らずにも実現できることが分かったので、使わなくなったけど、メモ。 private def noneSomeFilter[M](maybeObject:…

Adobe Airの環境構築 on Mavericks

詰まったのでメモ。 Flash Builder 4.7は、 Javaのバージョンが1.6でないと動かないらしい。 iOS用のプロジェクトを動かそうとすると Exception in thread "main" java.lang.Error: Unable to find llvm JNI lib in: /Applications/Adobe Flash Builder 4.6/…

Swiftでclass名取得

Swiftでクラス名を取得するとき、namespaceまでついてきちゃうので、困った。 ※NSStringFromClass(MyViewController)だと「ProjectName.MyViewController」になる。 ので、こんな方法で取得してみた。 NSStringFromClass(MyViewController).componentsSepara…

SwiftでUITableView

Arrayに突っ込む方をTupleにしてみた。 import UIKit class ViewController: UIViewController, UITableViewDelegate , UITableViewDataSource{ typealias cellInfo = (value1 : String, value2 : String) let cellIdentifier = "Cell" @IBOutlet strong var…

Swift Tuple

Swiftで複数の値を持った戻り値を扱える。 class ExamTuple{ class func execute()->(){ var ret = self.exam() println(ret.value1 + ret.value2) println("\(ret.value1 + ret.value2)") println(self.exam().0 + self.exam().1 ) } class func exam()->(v…

Swiftで三項演算子

: Stringは省略可能 まだ目が慣れない〜 import Foundation class ExamTernaryConditionalOperator{ class func execute() -> (){ self.innnerMethod(__FILE__) } class func innnerMethod(string :String?){ let str:String = string! var ret = str.hasPre…

Swiftのnil許容型を扱う

override func prepareForSegue(segue: UIStoryboardSegue?, sender: AnyObject?){ if segue{ println(segue!.identifier) } if let s = segue{ println(s.identifier) } var s2 = segue! println(s2.identifier) let s3 = segue! println(s3.identifier) pr…

block構文で再帰処理を書いてみる(NSNullを削除)

いまのところの最新はこれ。 もうちょっとすっきり書きたいなぁ id (^func)(id); __block __weak id (^weak_func)(id) = func = (id) ^(id collection){ __block id mutableDic = [@{} mutableCopy]; [collection enumerateKeysAndObjectsUsingBlock:^(id ke…

Block構文で記述した処理をインスタンスメソッドとして動的追加し、selectorで受けられるようにする

特定のクラスのインスタンスしか受けられないメソッドを、 新しくクラス定義せずに受けられるようにする方法。 さらにイマイチなことに、呼び出したいメソッドがコールバックにSEL型しか指定できなかったりする。 新しくクラス定義(.hと.m)を追加するのも微…

private propertyにカテゴリからアクセスする

.hに書いてしまうと容易に外からアクセスできてしまうため、 .mにプライベートな変数を置くことがままあります。 ただ、それだとカテゴリで機能を拡張した場合にアクセスできないので、 どうしたもんかなーと思っていました。 ちょっと考えたらできました。