Изменение / зацикливание текста в ярлыке

#ios #swift #xcode #label #uilabel

#iOS #swift #xcode #ярлык #uilabel

Вопрос:

Я хочу, чтобы моя метка меняла текст каждые 5 секунд, rLabel.text = "(update) free trial" подождите еще 5 секунд, затем измените ее rLabel.text = "upgrade now!" ~ при повторении.

 rLabel.text = "(update) free trial"
    if daysLeft <= 5 {
            let timer = Timer.scheduledTimer(timeInterval: 5, target: self, selector: #selector(self.update), userInfo: nil, repeats: true)
            timer.fire()
        }
    } else {
        rLabel.text = "(update) free trial"
    }
@objc func update() {
    rLabel.text = "upgrade now!"
}
  

Комментарии:

1. Можете ли вы более подробно объяснить, в чем проблема? Насколько я могу судить, ваш приведенный выше код должен работать просто отлично.

2. С вашим вопросом возникла проблема. Откуда берутся секунды? Где установлено обновление? Ваш вопрос является неполным без этих двух сведений

Ответ №1:

Вы можете просто использовать логическое значение для переключения текста каждые 5 секунд

 override func viewDidLoad() {
     let timer = Timer.scheduledTimer(timeInterval: 5, target: self, selector: #selector(self.update), userInfo: nil, repeats: true)
}

var isShowingText1 = false
@objc func updateText(){
    rLabel.text = isShowingText1 ? "Text 2" : "Text 1"
    isShowingText1 = !isShowingText1
}
  

Ответ №2:

Вы можете отслеживать текущий текст, имея index свойство. Также вы можете использовать Timer with block closure и избежать использования Obj-C-ish #selector

 var index = 0 {
    didSet {
        if index > 1 { index = 0 }
    }
}

var text: String {
    return ["(update) free trial", "upgrade now!"][index]
}

func foo() {
    rLabel.text = text
    Timer.scheduledTimer(withTimeInterval: 5, repeats: true) { _ in
        self.index  = 1
        self.rLabel.text = self.text
    }
}