#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)")
}
}