Можем ли мы остановить асинхронную функцию на некоторое время внутри?

версия Swift 3.0 с фактическим преобразованием размера шрифта

Обычно, если вы напрямую конвертируете html в атрибутную строку, размер шрифта увеличивается. Вы можете попытаться преобразовать строку html в атрибутную строку и вернуться назад, чтобы увидеть разницу.

Вместо этого здесь приведено фактическое преобразование размера, которое гарантирует, что размер шрифта не изменится, применяя коэффициент 0,75 на всех шрифты

extension String {
    func htmlAttributedString() -> NSAttributedString? {
        guard let data = self.data(using: String.Encoding.utf16, allowLossyConversion: false) else { return nil }
        guard let attriStr = try? NSMutableAttributedString(
            data: data,
            options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],
            documentAttributes: nil) else { return nil }
        attriStr.beginEditing()
        attriStr.enumerateAttribute(NSFontAttributeName, in: NSMakeRange(0, attriStr.length), options: .init(rawValue: 0)) {
            (value, range, stop) in
            if let font = value as? UIFont {
                let resizedFont = font.withSize(font.pointSize * 0.75)
                attriStr.addAttribute(NSFontAttributeName,
                                         value: resizedFont,
                                         range: range)
            }
        }
        attriStr.endEditing()
        return attriStr
    }
}
0
задан xtcanairo 5 March 2019 в 00:42
поделиться

2 ответа

Вам не нужно использовать async/await, чтобы делать то, что вы пытаетесь сделать. Использование setInterval и clearInterval даст вам желаемый эффект.

actualNumber = 0;
interval = null;

addingNumber(time: number) {
    if (this.interval === null) {
        this.interval = setInterval(() => this.actualNumber++, time);
    }
}

stopAddingNumber() {
    if (this.interval !== null) {
        clearInterval(this.interval);
        this.interval = null;
    }
}
0
ответ дан Jake Holzinger 5 March 2019 в 00:42
поделиться

Если я понял вашу проблему, как насчет использования setInterval и clearInterval. Вот пример кода, я не уверен, будет ли он работать нормально.

export class NumberAdd implements OnInit {

  actualNumber = 0;
  countActive: boolean;
  interval = null;

  constructor() { }

  ngOnInit() {
  }

  addingNumber(time: number) {
    if (interval) {
        clearInterval(interval);
        interval = null;
    }

    interval = setInterval(() {
        this.actualNumber += 1;
    }, time);
  }

  stopAddingNumber() {
    if (interval) {
        clearInterval(interval);
    }

    interval = null;
  }
}
0
ответ дан nieben 5 March 2019 в 00:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: