2015-03-03 17 views
63

Tôi không có mã để lấy mẫu hoặc bất kỳ thứ gì, bởi vì tôi không biết làm thế nào để làm điều đó, nhưng ai đó có thể cho tôi biết làm thế nào để trì hoãn một chức năng nhanh chóng trong một khoảng thời gian nhất định?Chức năng trì hoãn trong swift

+0

Bạn nên bao gồm những thứ bạn đã thử/nhìn lên. Tôi biết ngôn ngữ là khá mới, nhưng nó phải có tài liệu ở đâu đó. – Carcigenicate

+0

Không phải là nguồn hợp pháp nhất, nhưng hãy xem qua: http://www.reddit.com/r/swift/comments/28v5pv/wait_function/ – Carcigenicate

+1

Chỉ một lời khuyên - có vô số ví dụ về cách thực hiện điều này trong Obj-C. Nếu bạn muốn trở thành một nhà phát triển iOS có thẩm quyền, bạn sẽ cần phải học Obj-C, hoặc ít nhất là cách dịch Obj-C sang Swift. – AdamPro13

Trả lời

163

Bạn có thể sử dụng GCD (trong ví dụ với một sự chậm trễ 10 giây):

Swift 2:

let triggerTime = (Int64(NSEC_PER_SEC) * 10) 
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, triggerTime), dispatch_get_main_queue(), {() -> Void in 
    self.functionToCall() 
}) 

Swift 3:

DispatchQueue.main.asyncAfter(deadline: .now() + 10.0, execute: { 
    self.functionToCall() 
}) 
+3

GHI CHÚ NHANH: Bạn phải tự gọi mình là 'functionToCall()' vì nó nằm trong phạm vi đóng. I E. self.functionToCall() –

+0

cảm ơn @ B-Rad, tôi đã chỉnh sửa câu trả lời –

+0

"GCD" là gì? –

20
NSTimer.scheduledTimerWithTimeInterval(NSTimeInterval(3), target: self, selector: "functionHere", userInfo: nil, repeats: false) 

này sẽ gọi function functionHere() với độ trễ 3 giây

+3

cách gửi đối số trong hàm chức năngHere()? – PAC

+1

Swift 3 phiên bản này: Timer.scheduledTimer (timeInterval: TimeInterval (3), target: self, selector: "functionHere", userInfo: nil, repeats: false) –

2

Để thêm đối số vào chức năng trì hoãn.

Trước tiên hãy thiết lập từ điển, sau đó thêm từ khóa đó làm userInfo. Bỏ thông tin với bộ hẹn giờ làm đối số.

let arg : Int = 42 
let infoDict : [String : AnyObject] = ["argumentInt", arg] 

NSTimer.scheduledTimerWithTimeInterval(NSTimeInterval(3), target: self, selector: "functionHereWithArgument:", userInfo: infoDict, repeats: false) 

Sau đó trong hàm gọi

func functionHereWithArgument (timer : NSTimer) 
{ 
    if let userInfo = timer.userInfo as? Dictionary<String, AnyObject> 
    { 
     let argumentInt : Int = (userInfo[argumentInt] as! Int) 
    } 
} 
18

Swift 3 Phiên bản dành cho một sự chậm trễ 10 giây

unowned let unownedSelf = self 

let deadlineTime = DispatchTime.now() + .seconds(10) 
DispatchQueue.main.asyncAfter(deadline: deadlineTime, execute: { 
    unownedSelf.functionToCall() 
}) 
+1

DispatchQueue.main.asyncAfter (hạn chót: .now () + 10, thực thi: {something()}) –

Các vấn đề liên quan