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

标签 ios 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))
        }
    }

关于ios - 有没有办法在 Swift 中满足某个条件时结束递归方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43845979/

相关文章:

ios - 解析 XML - 从 URL 加载图像

ios - Swift Progress View 值传递函数

ios - TableView 不显示从 UIAlert 字段输入的数据

ios - Tessdata未复制到文档目录中

java - 如何生成 CIDOC CRM 格式的 RDF 文件

ios - 客户端凭证流 - 获取访问 token

ios - 添加、重用和删除 NSLayoutAnchors

ios - 在另一个 swift 结束时启动函数

ios - FBLoginView 读取权限不起作用

ios - popViewControllerAnimated 更改 UINavigationBar 的 UIColor