NSAttributedString 类型在 tableView 中没有下标成员

Posted

技术标签:

【中文标题】NSAttributedString 类型在 tableView 中没有下标成员【英文标题】:Type NSAttributedString has no subscript members in tableView 【发布时间】:2017-02-03 19:35:41 【问题描述】:

我有一个带有 X 项的 AttributedString 数组和一个将显示该数组的 tableView,并且对于数组中的每个项,表中都会有一个 Section。 在“cellForRowAt”函数中,如果我这样做 "let text = arrayTexts[indexPath.section][indexPath.row]",出现错误'Type NSAttributedString has no subscript members'。 我能做什么?

声明:var arrayTexts = [NSAttributedString]()

填充:

let html = json["data"][order]["informations"][textIndex]["text"].stringValue
                            let textHtml = html.unescapingFromHTML


                            do 
                                let str = try NSMutableAttributedString(data: textHtml.data(using: String.Encoding.unicode, allowLossyConversion: true)!, options: [NSDocumentTypeDocumentAttribute : NSHTMLTextDocumentType], documentAttributes: nil)
                                let fullRange : NSRange = NSMakeRange(0, str.length)
                                str.addAttributes([NSFontAttributeName: UIFont(name: "Helvetica Neue", size: 17.0)!], range: fullRange )

                                self.arrayTexts.append(str)
                                self.tableView.reloadData()
                             catch 
                                print(error)
                            

【问题讨论】:

展示你如何声明和填充arrayTexts 声明:var arrayTexts = [NSAttributedString]()。每个项目都是来自数据库的字符串,我使用“try NSMutableAttributedString (data : , options : , documentAttributes : )”将其转换为属性字符串并附加到 arrayTexts 您的语法假定数组(行)位于数组(部分)[[<Type>]] @vadian 是的,我尝试不使用 [indexPath.section] 并显示正确数量的部分,但所有部分中的文本都相同 【参考方案1】:

问题是你的let text = arrayTexts[indexPath.section][indexPath.row] 只有在你有一个 NSAttributedStrings 数组 ([[NSAttributedString]]) 的数组时才能工作。所以arrayTexts[indexPath.section] 会返回一个NSAttributedString,所以尝试用[indexPath.row] 下标会失败。如果不查看更多代码,很难准确理解您要做什么,但从您的描述看来,您只需将代码更改为 let text = arrayTexts[indexPath.section],它就会为您提供所需的内容。

【讨论】:

【参考方案2】:

需要声明数据源数组

var arrayTexts = [[NSAttributedString]]()

并填充数组

self.arrayTexts.append([str])

这将为每个项目创建一个部分。

【讨论】:

非常感谢您的帮助!我使用了我得到的另一个答案,但是通过您的答案,我学会了在单元格中使用更好的数组。非常感谢!

以上是关于NSAttributedString 类型在 tableView 中没有下标成员的主要内容,如果未能解决你的问题,请参考以下文章

Swift 4.2 类型“NSAttributedString.Key”没有成员“accessibilitySpeechPitch”

无法使用类型为 [重复] 的参数列表调用类型“NSAttributedString”的初始化程序

无法将 NSAttributedString.DocumentAttributeKey 类型的值转换为 .DocumentReadingOptionKey

Swift 4 - 如何在核心数据中保存 NSAttributedstring

将 NSAttributedString 添加到 CloudKit

NSAttributedString可以强制转换为NSMutableAttributedString类型吗?下面这代码有什么问题 为什么报错