Swiftui: передача интерполированной строки с изображением в текстовое представление, так как строка не отображает заданное изображение

#swiftui

Вопрос:

когда я передаю интерполированную строку с изображением в текстовое представление, она возвращается неправильно.

 
import SwiftUI

struct UserMediaCell: View {
    var body: some View {
        subView(label:"(Image(systemName: "ellipsis"))") 
        // shows incorrectly:
        // Image(provider: SwiftUI.ImageProviderBox<SwiftUI.Image.(unknown context at $18c350410).NamedImageProvider>)

        Text("(Image(systemName: "ellipsis"))") 
        // shows correctly. (sf symbol visible)
    }
}

struct subView: View {
    @State var label: String

    var body: some View {
        Text(label)
    }
}

 

как мне решить эту проблему?

Комментарии:

1. Вы планируете всегда использовать шрифт SF в качестве части этикетки? Если это так, просто передайте имя изображения шрифта SF и используйте его в подпросмотре в виде текста(«(Изображение(системное имя: whateverFontYouPass)) это будет дополнительный текст») или, если вы используете только шрифт SF, Изображение(Системное имя: whateverFontYouPass)

2. Вам следует прочитать эту статью: linuxtut.com/en/d9b0fdadec8ca77a556c

3. @Yrb в подвиде будут использоваться смешанные строки и изображения, вот почему я сделал это таким образом, спасибо за помощь в любом случае!

4. @RajaKishan это кажется полезным, спасибо!

Ответ №1:

Это связано с тем, что ваш подвид принимает результат интерполяции строк в качестве строкового типа. Где текстовое представление, которое работает правильно, использует не строку для инициализации представления, а локализованный строковый ключ.

Измените свое подвидо, чтобы учесть это следующим образом:

 // Structs, Classes, and Actors should start with a Capital Letter BTW
struct SubView: View {
    @State var label: LocalizedStringKey

    var body: some View {
        Text(label)
    }
}