无法找到一种在我的代码中实现等待功能的方法(快速)

时间:2019-02-09 16:04:29

标签: swift wait

我找不到实现等待功能的方法,我使用的是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秒。

4 个答案:

答案 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)
}