我找不到实现等待功能的方法,我使用的是siwftforwindows,到目前为止,尚无在线示例能够解决该问题。很快4.2
该类基本上是一个数组,当调用函数时,数组上的每个索引都会扣除一个常数。 tick函数就是所谓的。我是新手,所以如果我的代码看起来像****,请不要mean。谢谢您的任何输入。
class resProj {
var list = [1,1,1,1]
var projReq = [100,200,300,50]
var completed = false
func tick(){
for count in 0..<projReq.count{
if projReq[count] <= list[count]{
projReq[count] = 0
}
else if projReq[count] > list[count]{
projReq[count] -= list[count]
}
}
print(projReq)
}
init(
mathsP mathsIn: Int,
scienceP sciecnceIn: Int,
enginerP enginerIn: Int,
businessP businessIn: Int) {
self.list [0] = mathsIn
self.list [1] = sciecnceIn
self.list [2] = enginerIn
self.list [3] = businessIn
}
}
var spaceElev = resProj(
mathsP: 10,
scienceP: 20,
enginerP: 30,
businessP: 5)
var x = false
while x == false{
//wait function here pls//
print("tick", terminator:"?")
let y = readLine()
if y == "y"{
spaceElev.tick()
}
else{
print("gotta put y")
}
var templist = spaceElev.projReq
var templistcount = 0
templistcount = templist.count
for loop in 0..<templistcount{
if templist[loop] == 0{
templistcount -= 1
}
}
if templistcount == 0 {
x = true
print("project completed")
}
}
}
// //在这里等待功能,请//我想让程序等待1秒。
答案 0 :(得分:1)
有很多方法可以做到这一点,但是最常见的方法是创建一个补全函数。例如:
func doSth(_ someParameter: String, _ completion: ()->()) {
print(someParameter)
// After your code is finish call completion
completion()
}
当您致电时(有两种致电方式):
doSth("Done") {
print("You can be sure that this block will work after your func finish")
}
或者您可以简单地创建另一个func并将其作为参数发送。
您也可以使用DispatchQueue
:
DispatchQueue.main.asyncAfter(deadline: .now()+1) {
// put your func here...
}
答案 1 :(得分:0)
您可以简单地使用UNIX功能func sleep(_: UInt32) -> UInt32
。
在您的情况下,请使用sleep(1)
等待一秒钟。
答案 2 :(得分:0)
您可以使用Grand Central Dispatch或执行。
GCD解决方案:
let delayInSeconds = 1
DispatchQueue.main.asyncAfter(deadline: .now() + delayInSeconds) {
print("tick", terminator:"?")
}
如果您想了解有关Grand Central Dispatch(GCD)的更多信息,建议您通读以下内容: Grand Central Dispatch - Wikipedia
Grand Central Dispatch Tutorial - Ray Wenderlich
执行解决方案:
创建如下函数:
@objc func delayedFunc() {
//write the code here that you want to execute with a one second delay
}
然后在您希望延迟的函数执行的地方调用它:
let delayInSeconds = 1
perform(#selector(delayedFunc), with: nil, afterDelay: delayInSeconds)
答案 3 :(得分:0)
您可以使用RunLoop
类:
func wait(for interval: TimeInterval) {
RunLoop.current.run(until: Date() + interval)
}