繁体   English   中英

在Swift中满足特定条件时,是否有一种方法可以结束递归方法?

[英]Is there a way to end a recursive method when a certain condition is met in Swift?

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

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, "")始终返回(0.0, "")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM