Я работаю над добавлением некоторых модульных тестов для NSMutableAttributedString и UITextView, но не знаю, как подойти к этой ситуации.
В приложении есть значок микрофона, на котором человек может говорить, и текстовое представление расшифрует его слова. Транскрипция будет выделять транскрипцию до тех пор, пока человек или речь в тексте не остановит запись и вернется к предыдущим настройкам цвета пользовательского интерфейса.
func setSpeechToTextTranscript (transcript: String)
эта функция будет получать строку, подобную этой
SpeechToText didHypothesizeTranscription: Hello
SpeechToText didHypothesizeTranscription: Hello
SpeechToText didHypothesizeTranscription: Hello
SpeechToText didHypothesizeTranscription: Hello how
SpeechToText didHypothesizeTranscription: Hello how can I
SpeechToText didHypothesizeTranscription: Hello how can I help
SpeechToText didHypothesizeTranscription: Hello how can I help you
SpeechToText didHypothesizeTranscription: Hello how can I help you
У него будет две строки, одна для предыдущего текста и транскрипция
обе строки имеют разные атрибуты NSMutableAttributedString
let unfocusedTextToSpeechAttributes = createAttribute(font: self.font!, foregroundColor: getTextColorByBrightness())
let unfocusedTextRange = NSMakeRange(0, textCache.count)
let focusedTextToSpeechAttributes = createAttribute(font: self.font!, foregroundColor: self.getHighlightByBrightness(backgroundColor: self.backgroundColor!))
let focusedTextRange = NSMakeRange(textCache.count + 1, transcript.count)
Мне нужно проверить атрибуты в текстовом представлении и как мне получить атрибуты, чтобы проверить, чтобы убедиться, что они правильные?
Я попытался выполнить эту функцию, чтобы получить ожидаемые 4 атрибута (не сфокусированные и у сфокусированных атрибутов есть два из этих шрифтов и цвет текста), но атрибуты UITextView имеют 2 -
func getTextAttributes() -> [NSAttributedString.Key : Any] {
var range = NSRange(location: 0, length: text.count)
let attributes = self.attributedText.attributes(at: 0, effectiveRange: &range)
print("attributes count : " + String(attributes.count))
for attribute in attributes {
let key = attribute.key.rawValue
let value = attribute.value
if(key == "NSColor") {
}
else if(key == "NSFont") {
}
print(key)
}
return attributes
}
attributes count : 2
NSColor
NSFont
Есть указания, по которым я мог бы пойти, чтобы сохранить атрибуты в каком-то словаре, чтобы проверить, я не уверен, хочу ли я использовать / исследовать «Хранилище» (NSTextStorage или NSTextContainer), упомянутое в BestKets TextKit - WWDC 2018 или я я делаю это неправильно.