swift で NSInvocation っぽいことをやってみた
Objective-C - NSInvocation を使ってクラスメソッドを呼ぶ - Qiita
SwiftでのNSInvocation - Qiita
Selector で withObject を使って複数のパラメータを渡そうと思ったら、NSInvocation を使うといいよってグーグル先生に言われたんだけど、 swiftでは使えないらしい
どうしたかというと、NSMutableDictionary に突っ込んでみた。
//遅延ロード func delayLoad(path: String,url: NSURL ,img: UIImageView, img2: UIImageView) { let delay = 0.2 * Double(NSEC_PER_SEC) // 0.2秒遅延 var time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay)) var dic: NSMutableDictionary = NSMutableDictionary() dic.setObject(path, forKey: "PATH") dic.setObject(url, forKey: "URL") dic.setObject(img, forKey: "IMG") dic.setObject(img2, forKey: "IMG2") //オプションImageView dic.setObject(currentId, forKey: "CUID") // 現在処理中のID dispatch_after(time, dispatch_get_main_queue(), { NSThread.detachNewThreadSelector(Selector("delayLoadMethod:"), toTarget: self, withObject: dic) }) } |
呼び出し元
func delayLoadMethod (dic: NSDictionary) { var uii: UIImage var img: UIImageView var img2: UIImageView var cuid: String var path: String var url: NSURL var imageData1: NSData var err: NSError? path = dic.objectForKey("PATH") as! String img = dic.valueForKey("IMG") as! UIImageView url = dic.valueForKey("URL") as! NSURL cuid = dic.valueForKey("CUID") as! String img2 = dic.valueForKey("IMG2") as! UIImageView if cuid == currentId { // やりたい処理 } } |
セレクターの呼び出し先
ちなみに、代入時に、NSMutableDictionary ではなく、NSDictionary 使ったらクラッシュした。
UIImageView を渡したいときは、NSMutableDictionary を使うようにグーグル先生に言われた。
Dictionary と NSDictionary とNSMutableDictionary の違いがよく分かってなかったり
NSのプレフィクスの意味は、NeXTSTEPの略称 らしいのだけどね…。
swift 始めたばっかりなのでよくわからない・ω・
Comments