有没有办法在 Swift 中满足某个条件时结束递归方法



我有一个函数,它向我返回一个值及其大小,可以在计算标签宽度上设置。满足某些条件后,我想停止递归函数的进一步过程,例如中断

func getLength(value: Int, font: UIFont, viewFrame: CGRect) -> (width:CGFloat, text:String) {
    let width: CGFloat!
     var val = value
    let size = String(format:"%d",value).size(attributes: [NSFontAttributeName: font])
    if size.width+10 > viewFrame.size.width {
        width = viewFrame.size.width-10
        val = val/10
        _ = getLength(value: val, font: font, viewFrame: viewFrame)
        return (0.0 , "")
    } else {
        width = size.width+10
        return (width,String(format:"%d+",val))
    }
}

使用递归函数时,您应该在两个条件下返回值

 func getLength(value: Int, font: UIFont, viewFrame: CGRect) -> (width:CGFloat, text:String) {
        let width: CGFloat!
         var val = value
        let size = String(format:"%d",value).size(attributes: [NSFontAttributeName: font])
        if size.width+10 > viewFrame.size.width {
            width = viewFrame.size.width-10
            val = val/10
            return getLength(value: val, font: font, viewFrame: viewFrame)
        } else {
            width = size.width+10
            return (width,String(format:"%d+",val))
        }
    }

只需在函数中返回一个值,而不是再次递归调用函数。这将停止递归,您将返回调用堆栈,并返回一个值。在您的情况下,递归看起来毫无意义,因为如果您的if语句的计算结果为 true,您总是返回(0.0, "")

最新更新