![](/img/trans.png)
[英]Referencing initializer 'init(destination:label:)' on 'NavigationLink'
[英]How to replace init(destination:tag:selection:label:) with NavigationLink(value:label:) in Swift for iOS16?
我正在使用以下 Swift 代碼在我的 iPhone 應用程序中做兩件事:
somethingElse()
SecondView()
代碼
struct PrimaryView: View {
@State var buttonSelected: Int? = nil
func onSubmit() {
somethingElse()
self.buttonSelected = 1
}
var body: some View {
NavigationStack {
NavigationLink(destination: SecondView(), tag: 1, selection: $buttonSelected) {
Button(action: {
onSubmit()
}) {
Text("Click me")
}
}
}
}
}
這工作正常,但我收到以下警告:
'init(destination:tag:selection:label:)' 在 iOS 16.0 中被棄用:在 NavigationStack 或 NavigationSplitView 的列表中使用 NavigationLink(value:label:)...
問題:如何重構此代碼以使警告消失但功能保持不變?
如果您按照警告中的建議進行操作,您會得到如下信息:
NavigationStack {
List {
NavigationLink(value: 1) { // use some tag here
Button(action: {
onSubmit()
}) {
Text("Click me")
}
}
}.navigationDestination(for: Int.self) { _ in
// check the closure parameter here to return a different view
SecondView()
}
}
當然,這會給你一個List
。 如果您不希望這樣,另一個重載destinationLink(isPresented:destination:)
似乎可以工作。 代碼很簡單
NavigationStack {
Button(action: {
onSubmit()
}) {
Text("Click me")
}.navigationDestination(isPresented: $buttonSelected, destination: { SecondView() })
}
隨着buttonSelected
更改為Bool
:
@State var buttonSelected: Bool = false
func somethingElse() {
print("something Else")
}
func onSubmit() {
somethingElse()
self.buttonSelected = true
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.