no_picture

swiftで書いたProtocolをObj-Cで使うなら@objcをつけろ

Swiftで書いたProtocolをObjective-Cで使う予定があるなら、@objcをつけなければいけない。 つけなければ、Obj-C側で使えない。 @objc protocol Hoge { func get() -> Int } というHogeプロトコルがあったとき class HogeService : NSObject { let hoge: Hoge } としたとき、HogeServiceのhogeをィールド利用しようとするとコンパイルエラーになる。 そもそもヘッダファイルに書き出されない。 単にちゃんとドキュメントを読んでいなくてハマっただけといえばそれだけである。 類似したもので、Swiftで書いたクラスはNSObjectを継承していないとObjective-Cで使えないなどある。 参考文献 SwiftとObjective-Cで相互に連携する - Qiita

no_picture

raptureXML でXMLのparse

XMLのパースしなきゃいけなくて、libxmlで処理するのめんどくさいなー。ということで、CocoaPodを探った結果、RaptureXMLを試してみることにしました。 URLから直接XMLを取得するイニシャライザがついていて、とても簡単に利用することができました。 CocoaPodsを使わない場合は libz と libxml2 をリンクしてやるようにして、RXMLElement.hとRXMLElement.mをプロジェクトに追加するだけで使えます。 だいたい以下のように利用してます。 NSURL* url = [NSURL URLWithString:@"http://eiel.info/hoge.xml"]; RXMLElement* root = [RXMLElement elementFromURL:url]; NSMutableArray* schedule = [NSMutableArray array]; [root iterate:@"item" usingBlock: ^(RXMLElement *item) { [schedule addObject:[[ALScheduleItem alloc] initWithRXMLElement:item]]; }]; i_schedule = [NSArray arrayWithArray:schedule]; RXMLElementオブジェクトを配列に格納しておいて利用しようとしたら、失敗したのでモデルオブジェクトを用意してやりました。 値を取り出すには [element child:@"day"].text; とやって取り出せます。DOMのインターフェイスになってますね。XPathも利用できるようです。 ソースコードも500行程度でコンパクトでした。