[英]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.