Нет точных совпадений в вызове инициализатора текста, как я могу решить эту проблему в SwiftUI?

#swift #swiftui

Вопрос:

Я новичок в swift, это может быть глупый вопрос, но он долгое время сбивает меня с толку. Вот мой код, я написал этот код, имитируя пример сэндвича из вступления WWDC 2020 в SwiftUI.

 import SwiftUI

struct movieDetail: View {

    var idnum:Int

    var body: some View {

        Text(idnum)

    }
}

struct movieDetail_Previews: PreviewProvider {

    static var previews: some View {

        NavigationView {
            movieDetail(idnum:24428)
        }
       
    }
}
 

в то время как он отображается как ошибка компиляции:

Нет точных совпадений в вызове инициализатора.

Пример WWDC 2020 приведен ниже

 import SwiftUI

struct sandwichdetail: View {

    var sandwich:Sandwich
    @State private var zoomed = false

    var body: some View {

        VStack {
            Text(sandwich.name)
        }
        .navigationTitle(sandwich.name)
        .edgesIgnoringSafeArea(.bottom)
    }
}

struct sandwichdetail_Previews: PreviewProvider {

    static var previews: some View {
        NavigationView{
            sandwichdetail(sandwich: testData[1])
        }
        
    }
}
 

Я не совсем понимаю разницу между этими 2 частями кода и почему мой код не работает, а пример сэндвича успешно отображает название сэндвича.

Ответ №1:

У Text типа нет инициализатора, который принимает Int . Попробуйте это вместо этого:

 Text("(idnum)")
 

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

1. Отлично, это работает, большое спасибо, мне нужно быть более внимательным к этим деталям

Ответ №2:

Еще один более быстрый способ-использовать description , потому что Int соответствует протоколу CustomStringConvertible.

 Text(idnum.description)
 

Ответ №3:

Вы можете создать свой собственный инициализатор Text , если это обычный для вас вариант использования, используя интерполяцию строк Swift. Однако это может снизить видимость типа на сайте вызова.

 extension Text {

    init(_ int: Int) {
        self = Text("(int)")
    }

}