Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/114.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Can';不要让计时器倒计时_Ios_Swift_Xcode_Timer - Fatal编程技术网

Ios Can';不要让计时器倒计时

Ios Can';不要让计时器倒计时,ios,swift,xcode,timer,Ios,Swift,Xcode,Timer,我正在努力学习如何在Swift中使用计时器,而我查找的每个解决方案都以某种方式被破坏或超出了我的理解范围 我试过闭嘴,但没有 关闭后,我实际上可以让应用程序运行而不会崩溃,但计时器只是重复60,它不会倒计时,我也不知道为什么 let timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true, block: { timer in var secondsRemaining = 60 print(

我正在努力学习如何在Swift中使用计时器,而我查找的每个解决方案都以某种方式被破坏或超出了我的理解范围

我试过闭嘴,但没有


关闭后,我实际上可以让应用程序运行而不会崩溃,但计时器只是重复
60
,它不会倒计时,我也不知道为什么

let timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true, block: { timer in
        var secondsRemaining = 60
        print(secondsRemaining)
        secondsRemaining -= 1
    })
class ViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()

var secondsRemaining = 60
    
let timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true, block: { timer in
            print(secondsRemaining)
            secondsRemaining -= 1
        })
}
}
我还尝试使用带有选择器的@objc func,但我的应用程序立即崩溃,出现错误
线程1:“-[\uu SwiftValue countdown]:发送到实例0x600002970e40的无法识别的选择器”
(我甚至还没有尝试倒计时)

感谢您的帮助

编辑 如果将变量放在块外部,则块内部会出现错误
实例成员'secondsRemaining'不能用于类型'ViewController'

class ViewController: UIViewController {

var secondsRemaining = 60
    
let timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true, block: { timer in
            print(secondsRemaining)
            secondsRemaining -= 1
        })
}
但是,如果我创建一个新项目,并将计时器放入
viewDidLoad()
,它就会工作。我不知道为什么

let timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true, block: { timer in
        var secondsRemaining = 60
        print(secondsRemaining)
        secondsRemaining -= 1
    })
class ViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()

var secondsRemaining = 60
    
let timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true, block: { timer in
            print(secondsRemaining)
            secondsRemaining -= 1
        })
}
}

每次计时器启动时,都会实例化一个初始值为60的新变量,因此总是打印60。 您必须在以下外部声明计数变量:

private var secondsRemaining = 60

let timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true, block: { timer in

    print(self.secondsRemaining)
    self.secondsRemaining -= 1
})
或:


您正在计时器调用中声明计数器。这就是为什么每次计时器执行时,它都会将计数器重置为60秒。您需要在其调用之外声明计时器:

var secondsRemaining = 60

let timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true, block: { timer in
        print(secondsRemaining)
        secondsRemaining -= 1
    })

如上所述,不要每次进入闭包时都重置变量,并将计时器更改为以下值。创建一个简单的obj函数来执行您想要的任何逻辑。也有意义地命名你的功能主义者

class XViewController: UIViewController {
private var secondsRemaining:Int = 60

let timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(startScrolling), userInfo: nil, repeats: true)


@objc func startScrolling() {
    print(secondsRemaining)
    secondsRemaining -= 1
}

}以下是固定代码:

class ViewController: UIViewController {

    private  var secondsRemaining = 60

    override func viewDidLoad() {
        super.viewDidLoad()
   
        let timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true, block: { timer in
            print(secondsRemaining)
            secondsRemaining -= 1
        })
    }
}

“它不倒计时,我不知道为什么。”我倒计时。因为那是你让它做的。每次计时器启动时,您都会说
var secondsRemaining=60;打印(第二次维护)
。也就是说打印60。每次都是,谢谢。我已尝试在外部声明计数变量,但出现了一个错误,
实例成员'secondsRemaining'不能用于类型'ViewController'
。我刚刚创建了一个新项目,并将计时器插入viewDidLoad()中,它就可以工作了。我的原始项目没有
viewDidLoad()
,如果我在新项目中注释掉
viewDidLoad()
,它也不起作用。这应该是一个问题吗?