如何在Extension SwiftUI enter image description here中将更新值分配给文本值
extension Text {
public func translate(text: String) -> Text{
var translated = ""
let conditions = ModelDownloadConditions(allowsCellularAccess: true, allowsBackgroundDownloading: true)
GoogleTranslatorManager.shared.translator?.downloadModelIfNeeded(with: conditions) { error in
guard error == nil else { return }
GoogleTranslatorManager.shared.translator?.translate(text) { translatedText, error in
guard error == nil, let translatedText = translatedText else {
// uiView.text = text
return
}
print(translatedText)
translated = translatedText
//**Here: How to assign updated Value to Text ** \\
}
}
return Text(verbatim: translated)
}
}
1条答案
按热度按时间vi4fp9gy1#
我看到你的方法有几个问题。
首先,将此扩展放在
Text
上没有多大意义-Text
是一个显示String
的视图。将扩展放在String
上更有意义。其次,如果你在
String
上做一个扩展,那么函数在self
上操作-也就是String
示例本身,而不是接受一个参数。最后一个问题是转换操作是异步的,所以你不能返回值。
作为
String
上的扩展,它可能看起来像这样:你可以这样称呼它:
现在,您仍然有实际更新屏幕上的
Text
视图的问题。您可以在某些模型中使用@State
字符串属性或@Published
属性,并更新该字符串值,视图将更新(您可能需要将其调度到主队列)。真的,我不认为在
String
上创建这个扩展有什么价值。这真的是你希望所有字符串都具有的新行为吗?最好将其实现为翻译管理器对象中的一个函数。