最初のSwiftUIプロジェクト:)詳細ビューを呼び出すトップレベルビューのリストからNavLinkを持っています。Struct の @State var を詳細ビューに追加する必要があるまでは機能していましたが、今では呼び出しパラメーター リストがコンパイラーが期待するものと一致しません。
ZStack {
VStack {
NavigationView {
List(gList) { gard in
NavigationLink(destination:
SelectGlyph(catList: gard.category,
firstGlyph: gard.ex1,
descr: gard.title,
selectedGlyph: Glyph() )
{
詳細ビューは次のように始まります。
struct SelectGlyph: View {
var catList: String
var firstGlyph: String
var descr: String
@State var selectedGlyph:Glyph = Glyph()
var body: some View {
ZStack{
VStack() {
VStack {
VStack {
VStack {
Glyph Struct は次のように定義されます。
struct Glyph: Codable, Identifiable, Equatable {
var id:String {
return Gardiner
}
var Hieroglyph: String
var Gardiner: String
let Unicode: String
let Description: String
let Transliteration: String
let Phonetic: String
let Notes: String
init() {
self.Hieroglyph = ""
self.Gardiner = ""
self.Unicode = ""
self.Description = ""
self.Transliteration = ""
self.Phonetic = ""
self.Notes = ""
}
init(Hiero:String, Gard:String, Uni:String, Desc:String, trans:String, phon:String, notes:String) {
self.Hieroglyph = Hiero
self.Gardiner = Gard
self.Unicode = Uni
self.Description = Desc
self.Transliteration = trans
self.Phonetic = phon
self.Notes = notes
}
}
エラーは、最上位の ContentView navLink Destination にあります。
'SelectGlyph.Type' is not convertible to '(String, String, String, Glyph) -> SelectGlyph'
呼び出しリストでいくつかのバリエーションを試し、SelectGlyph の @State ラッパーを削除しようとしましたが、すべて効果がありませんでした。どんな助けでも大歓迎です!呼び出しで必須の引数にせずにビューでローカル変数を指定する方法を知っていればいいのですが (私はここに何かが欠けていると確信しています!)
Asperi に対応して、SelectGlyph ビューの明示的な初期化子を試しましたが、同じ場所で同じエラーが発生しました。
struct ContentView: View {
var gList: [GardinerList] = gardinerTest
var body: some View {
UINavigationBar.appearance().backgroundColor = .yellow
return
ZStack {
VStack {
NavigationView {
List(gList) { gard in
NavigationLink(destination:
SelectGlyph(catList: gard.category, <- Error Here
firstGlyph: gard.ex1,
descr: gard.title,
selectedGlyph: Glyph() )
{
Text(gard.category)
.fontWeight(.bold)
.foregroundColor(Color.green)
SelectGlyph ビューが変更され、明示的な init() を持つようになりました。init() で selectedGlyph を _selectedGlyph および self._selectedGlyph として指定してみました
struct SelectGlyph: View {
var catList: String
var firstGlyph: String
var descr: String
@State private var selectedGlyph:Glyph = Glyph()
init(catList: String, firstGlyph: String, descr: String, selectedGlyph:Glyph) {
self.catList = catList
self.firstGlyph = firstGlyph
self.descr = descr
self._selectedGlyph = State<Glyph>(initialValue: selectedGlyph)
}
var body: some View {
ZStack{
VStack() {