最近在回答StackOverflow的問題時(shí),發(fā)現(xiàn)performSelector方法在Swift被去掉,Apple的注釋是這個(gè)方法被去掉是因?yàn)椴话踩?/p>
NOTEThe performSelector: method and related selector-invoking methods are not imported in Swift because they are inherently unsafe.
如果在Swift調(diào)用這個(gè)方法會(huì)編譯出錯(cuò):
'performSelector' is unavailable: 'performSelector' methods are unavailable
反復(fù)嘗試后,我發(fā)現(xiàn)可以使用 UIControl:
func sendAction(_ action: Selector, to target: AnyObject!, forEvent event: UIEvent!)
下面是一段演示代碼:
import UIKitclass ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. var control:UIControl = UIControl() control.sendAction(Selector("greetings"), to: self, forEvent: nil) } func greetings() {
Log打印出:
greetings world
如果是Swift調(diào)用Objective-C類的target和action,可以參考下面的例子,假設(shè)有TestClass是Objective-C類,并且有g(shù)etBarButtonItem返回UIBarButtonItem:
#import "TestClass.h"@implementation TestClass- (UIBarButtonItem *)getBarButtonItem{ UIBarButtonItem *bar = [[UIBarButtonItem alloc] init]; bar.target = self; bar.action = @selector(help); return bar;}- (void)help{ NSLog(@"Help offered");}@end
那么在Swift里可以用下面的代碼執(zhí)行help方法:
import UIKitclass ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. var testClass = TestClass() var button: UIButton = UIButton() var barButtonItem = testClass.getBarButtonItem() button.sendAction(barButtonItem.action, to: barButtonItem.target, forEvent: nil) } }
Log打印出:
2014-07-06 23:49:49.942 TestApp [53986:2552835] Help offered
可以使用NSThread.detachNewThreadSelector,好處是可以使用延遲,并且可以附帶object,下面是掩飾代碼:
import UIKitclass ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. let delay = 2.0 * Double(NSEC_PER_SEC) var time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay)) dispatch_after(time, dispatch_get_main_queue(), { NSThread.detachNewThreadSelector(Selector("greetings:"), toTarget:self, withObject: "sunshine") }) } func greetings(object: AnyObject?) { println("greetings world") println("attached object: /(object)") } }
使用NSTimer:
class func scheduledTimerWithTimeInterval(_ seconds: NSTimeInterval, target target: AnyObject!, selector aSelector: Selector, userInfo userInfo: AnyObject!, repeats repeats: Bool) -> NSTimer!
Xcode 6 Beta2
另外請(qǐng)參考一篇不錯(cuò)的文章:初探swift語言的學(xué)習(xí)筆記十一(performSelector)
![]() | 作者:Yang Zhou 出處:http://yangzhou1030.VEVb.com 本文版權(quán)歸作者和博客園共有,未經(jīng)作者同意禁止轉(zhuǎn)載,作者保留追究法律責(zé)任的權(quán)利。請(qǐng)?jiān)谖恼马撁婷黠@位置給出原文連接,作者保留追究法律責(zé)任的權(quán)利。 |
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注