字符串为空时更改变量/整数

时间:2018-09-25 09:55:07

标签: ios swift if-statement

我正在尝试计算标签的高度,以便可以动态设置其单元格的高度。这样可以正常工作:

let commentText = itemsFeed[indexPath.item].comment
let commentRect = NSString(string: commentText!).boundingRect(with:CGSize(width: rectWidth, height: 1000), options: NSStringDrawingOptions.usesFontLeading.union(NSStringDrawingOptions.usesLineFragmentOrigin), attributes: [NSAttributedStringKey.font: UIFont.boldSystemFont(ofSize: 16)], context: nil)
let commentHeight = ceil(commentRect.height)

这将返回所有正确的值,我可以基于commentHeight动态设置高度。

但是,当我不添加评论时,我想为commentHeight返回0,但是Swift返回20(一个行标签的默认高度)。我该如何覆盖呢?

我尝试添加如下if语句:

if(commentText?.isEmpty)! {

    let commentHeight = 0

} else {

    let commentText = itemsFeed[indexPath.item].comment
    let commentRect = NSString(string: commentText!).boundingRect(with:CGSize(width: rectWidth, height: 1000), options: NSStringDrawingOptions.usesFontLeading.union(NSStringDrawingOptions.usesLineFragmentOrigin), attributes: [NSAttributedStringKey.font: UIFont.boldSystemFont(ofSize: 16)], context: nil)
    let commentHeight = ceil(commentRect.height)

}

但是这会返回使用未解析的标识符'commentHeight'来返回我的CGSize(其中需要commentHeight)。

有关如何实现此目的的任何提示或技巧,以便如果没有文本,则commentHeight将为0?

(显示的所有代码都在sizeForItemAt方法内部)

3 个答案:

答案 0 :(得分:0)

变量只存在于大括号内,而在此处未声明。试试这个:

let commentHeight: CGFloat
if(commentText?.isEmpty)! {
    commentHeight = 0
} else {
    let commentText = itemsFeed[indexPath.item].comment
    let commentRect = NSString(string: commentText!).boundingRect(with:CGSize(width: rectWidth, height: 1000), options: NSStringDrawingOptions.usesFontLeading.union(NSStringDrawingOptions.usesLineFragmentOrigin), attributes: [NSAttributedStringKey.font: UIFont.boldSystemFont(ofSize: 16)], context: nil)
    commentHeight = ceil(commentRect.height)
}

答案 1 :(得分:0)

最简单的纠正方法是:

let commentHeight: CGFloat = commentText?.isEmpty == true ? 0 : ceil(NSString(string: itemsFeed[indexPath.item].comment!).boundingRect(with:CGSize(width: rectWidth, height: 1000), options: NSStringDrawingOptions.usesFontLeading.union(NSStringDrawingOptions.usesLineFragmentOrigin), attributes: [NSAttributedStringKey.font: UIFont.boldSystemFont(ofSize: 16)], context: nil).height)

(如果避免了力解开,在处理可选内容时使用if-letguard??,则我更愿意这样做

答案 2 :(得分:-1)

如果您需要根据标签的内容调整标签的大小,则可以使用界面生成器将行数设置为0。然后,标签将自动为u调整大小。