gpt4 book ai didi

ios - 带有 2 个换行符的 NSmutablestring 使程序崩溃

转载 作者:行者123 更新时间:2023-11-28 14:12:00 26 4
gpt4 key购买 nike

我需要创建一个以换行符开头的 Nsmutableattributed 字符串,代码如下:

let dateString = TimeUtils.formatTimeOnly(from: data.date!)
let dateMutableString = NSMutableAttributedString.init(string: "\n\(dateString)")
let range = NSRange(location: 0, length: (dateString.count + 2))
dateMutableString.addAttributes([NSFontAttributeName: UIFont(name: "SourceSansPro-Regular", size: 11)!, NSForegroundColorAttributeName: UIColor.gray], range: range)

如果我只用一个\n 开始字符串,它会使 addattributes 行上的程序崩溃,但如果我使用\n\n 则它不会破坏程序。我能知道这里到底发生了什么吗?

最佳答案

如果只有一个额外字符,则 dateString.count + 2 比字符串长,您会因为范围无效而崩溃。

为什么范围长度基于 dateString.count + 2?为什么不构建你想要的字符串,然后将该字符串传递给 NSMutableAttributedString 初始化器?然后你可以直接得到那个字符串的长度。为什么不将所需的属性传递给初始化程序,因为无论如何您都希望将它们应用于整个字符串?

除此之外,在使用 NSStringNSAttributedString 时,您不能在 Swift 字符串上使用 count 来获取长度。您需要使用 dateString.utf16.count。这是因为 NSStringNSAttributedStringNSRange 是基于 16 位字符的。

这是创建属性字符串的更简单方法,其中属性应用于整个字符串:

let dateString = TimeUtils.formatTimeOnly(from: data.date!)
let dateAttributes = [NSFontAttributeName: UIFont(name: "SourceSansPro-Regular", size: 11)!, NSForegroundColorAttributeName: UIColor.gray]
let dateMutableString = NSMutableAttributedString(string: "\n\(dateString)", attributes: dateAttributes)

关于ios - 带有 2 个换行符的 NSmutablestring 使程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52436177/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com