如何处理 swiftui @State optional unwrap
Posted
技术标签:
【中文标题】如何处理 swiftui @State optional unwrap【英文标题】:how to deal with swiftui @State optional unwrap 【发布时间】:2020-11-02 02:58:17 【问题描述】:在 swiftui 中,我有一个状态变量 count,它是可选的,在当前的工作表中,我打开可选的并显示 Detailview,但它似乎从来没有打到那里。
知道为什么不去那里吗?
它似乎永远不会命中
DetailView(count: num)
import SwiftUI
struct ContentView: View
@State var showDetailView = false
@State var count : Int?
var testArr = [1,2,3,4,5]
var body: some View
NavigationView
List(testArr.indices) indice in
Text("row num \(indice)")
.onTapGesture
self.showDetailView = true
self.count = 5
.sheet(isPresented: self.$showDetailView)
if let num = self.count
//never hit here
DetailView(count: num)
.navigationBarTitle("Your Reading")
struct ContentView_Previews: PreviewProvider
static var previews: some View
ContentView()
struct DetailView: View
var count: Int
var body: some View
if count == 5
Text("5555")
else
EmptyView()
【问题讨论】:
【参考方案1】:问题不在于可选的展开。 问题是您在计算正文时正在执行更新以计数。为了克服这个问题,使用我的解决方案: swiftui state variable count lost what it stored
如果该解决方案不适合您,请告诉我。
如果您确实必须使用 @State var count,则可以使用此解决方法(不推荐)。
DispatchQueue.main.async
self.count = 5
【讨论】:
【参考方案2】:您可以使用sheet(item:content:)
代替sheet(isPresented:content:)
:
struct ContentView: View
@State var count: Int?
var testArr = [1, 2, 3, 4, 5]
var body: some View
NavigationView
List(testArr.indices) index in
Text("row num \(index)")
.onTapGesture
self.count = 5
.sheet(item: $count) count in
DetailView(count: count)
.navigationBarTitle("Your Reading")
注意item
必须符合Identifiable
,因此您需要使用自己的结构或创建Int
扩展:
extension Int: Identifiable
public var id: Int self
【讨论】:
以上是关于如何处理 swiftui @State optional unwrap的主要内容,如果未能解决你的问题,请参考以下文章
机器学习模型如何获得可重复的结果?最佳实践是什么?如何处理random_state参数?
Xcode UI测试如何处理UNUserNotificationCenter生成的通知权限