在我的Swift代码中找不到实现等待功能的方法

问题描述 投票:0回答:4

我找不到实现等待功能的方法,我使用的是swiftforwindows,到目前为止,尚无在线示例能够解决该问题。是Swift 4.2

该类基本上是一个数组,当调用函数时,该数组上的每个索引都会扣除一个常数。 tick函数就是所谓的。我是Swift的新手。

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")
}
}
     }

//wait function here pls//的地方,我想让程序等待1秒钟。

swift wait
4个回答
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")
}

或者您可以简单地创建另一个函数并将其作为参数发送。

您也可以使用DispatchQueue

DispatchQueue.main.asyncAfter(deadline: .now()+1) {
    // put your func here...
}

0
投票

您可以简单地使用UNIX-Functin func sleep(_: UInt32) -> UInt32。在您的情况下,请使用sleep(1)等待一秒钟。


0
投票

您可以使用Grand Central Dispatch或执行。

GCD解决方案:

let delayInSeconds = 1
DispatchQueue.main.asyncAfter(deadline: .now() + delayInSeconds) {
print("tick", terminator:"?")
}

[如果您想了解有关中央中央调度(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)

0
投票

您可以使用RunLoop类:

func wait(for interval: TimeInterval) {
    RunLoop.current.run(until: Date() + interval)
}
© www.soinside.com 2019 - 2024. All rights reserved.