目前我的代码中有两个for循环,它们的特定目的是将相同的字符串附加到相同的数组中,但根据它们是否匹配以不同的颜色。
if isMatch {
secondBody.node?.run(colorTransition(fromColor: .init(customName: .brandWhite),
toColor: .init(customName: .brandGreen)))
for lyric in lyricsArray {
let green = UIColor.init(customName: .brandGreen)
let attributedStringColor = [NSAttributedString.Key.foregroundColor : green]
let attributedString = NSAttributedString(string: lyric!, attributes: attributedStringColor)
let lyricColor = attributedString.string
array.append(lyricColor)
defaults.set(array, forKey: "SavedLyrics")
print(array.joined(separator: " "))
}
} else {
secondBody.node?.run(colorTransition(fromColor: .init(customName: .brandWhite),
toColor: .init(customName: .brandRed)))
for lyric in lyricsArray {
let red = UIColor.init(customName: .brandRed)
let attributedStringColor = [NSAttributedString.Key.foregroundColor : red]
let attributedString = NSAttributedString(string: lyric!, attributes: attributedStringColor)
let lyricColor = attributedString.string
array.append(lyricColor)
defaults.set(array, forKey: "SavedLyrics")
print(array.joined(separator: " "))
}
}
在一个单独的视图中,我像这样调用userdefaults:
let defaults = UserDefaults.standard
let myArray = defaults.stringArray(forKey: "SavedLyrics")
songLyricResults.text = myArray?.joined(separator: " ")
这一切都会像我想要的那样工作。唯一不工作的是让textViewsongLyricResults
显示我在for循环中分配的颜色的文本。从阅读周围,我可以看到,我可能必须转换我的attributedString到一个数据类型,并以这种方式引用它,但我有点迷路了。任何帮助都会很感激。感觉我离期望的结果很近了,只是缺少了一些东西。
-
您最终添加到数组中的是字符串,而不是带有
let lyricColor = attributedString.string
的属性字符串。您需要添加带有属性的字符串本身,而不仅仅是它的字符串组件(没有样式)。要在文本视图中呈现属性字符串,请确保将其添加到songLyricResults.attributedText
属性,而不是text
属性。 -
参考这个来学习如何在UserDefaults中保存一个有属性的字符串:如何在NSUserDefaults中使用store和NSMutableAttributedString
-
您确定要使用用户默认值来存储此信息吗?对我来说,这似乎不是最好的用例。考虑将这些信息保存在文件管理器的磁盘上,可能保存在文档目录中,或者使用Core Data(但我个人避免这样做有很多开销)。