swift 中文本为 nil 时如何隐藏标签

How to hide label when its text is nil in swift

我正在将 badgeLabel 添加到 cartBtn.. 这里 我无法将整数转换为字符串以及将字符串转换为整数以隐藏 badgeLabel 如果其计数为 0

代码:

    public var badgeText: String? {
    didSet {
        let wasNil = NSString(string: badgeText ?? "0").integerValue <= 0
        badgeLabel.isHidden = badgeText == nil
        badgeLabel.text = badgeText
        setSize()

        if animated {

            let animations: () -> Void = { [weak badgeLabel] in
                badgeLabel?.layer.transform = CATransform3DMakeScale(1, 1, 1)
            }

            if wasNil {
                badgeLabel.layer.transform = CATransform3DMakeScale(0.1, 0.1, 0.1)
            }

            UIView.animate(withDuration: 0.5,
                           delay: 0.2,
                           usingSpringWithDamping: 0.3,
                           initialSpringVelocity: 0.3,
                           options: UIView.AnimationOptions(),
                           animations: animations,
                           completion: nil)
        }
    }
}
public var badgeBackgroundColor = UIColor.red {
    didSet {
        badgeLabel.backgroundColor = badgeBackgroundColor
    }
}

像这样给标签添加计数

 let cartQty = UserDefaults.standard.value(forKey: "cartCount")
 cartBtn.badgeText = cartQty as? String

这里如果 cartBtn.badgeText 是 nil 那么我也会显示 badgeLabel 但如果它是 nil 我不想显示 badgeLabel.. 怎么做帽子.. 请做帮助

wasNil 为真时,您似乎并没有真正使用动画。也不要使用 NSString,它现在是一个较旧的 API,您可以使用一个简单的 Int 初始化程序从 StringInt

这是一些更新的代码:

public var badgeText: String? {
    didSet {
        // changing this variable name for clarity.
        let isTextAString: Bool = Int(badgeText ?? "") == nil

        badgeLabel.isHidden = isTextAString
        badgeLabel.text = badgeText

        setSize()

        if animated {
            UIView.animate(withDuration: 0.5,
                           delay: 0.2,
                           usingSpringWithDamping: 0.3,
                           initialSpringVelocity: 0.3,
                           options: UIView.AnimationOptions()) {

                self.badgeLabel?.layer.transform = CATransform3DMakeScale(1, 1, 1)

                // You can just do this `if` statement inside the animation block

                if isTextAString {
                     self.badgeLabel.layer.transform = CATransform3DMakeScale(0.1, 0.1, 0.1)
                }

            } completion: { (_) in }
        }
    }
}