gpt4 book ai didi

ios - 'identity' 在 SwifUI 中是什么意思以及我们如何更改某些东西的 'identity'

转载 作者:行者123 更新时间:2023-12-01 15:42:51 26 4
gpt4 key购买 nike

我是 SwiftUI 的新手,在连续显示警报时遇到问题。
.alert(item:content:) 的描述修饰符在它的定义中写了这个:

/// Presents an alert.
///
/// - Parameters:
/// - item: A `Binding` to an optional source of truth for the `Alert`.
/// When representing a non-nil item, the system uses `content` to
/// create an alert representation of the item.
///
/// If the identity changes, the system will dismiss a
/// currently-presented alert and replace it by a new alert.
///
/// - content: A closure returning the `Alert` to present.

public func alert<Item>(item: Binding<Item?>, content: (Item) -> Alert) -> some View where Item : Identifiable


我对 If the identity changes, the system will dismiss a currently-presented alert and replace it by a new alert 特别感兴趣部分。由于我希望连续显示警报,如果我能够以某种方式更改“身份”,我将能够实现我想要的功能 - 即让系统关闭当前显示的警报并将旧警报替换为新警报(背靠背)。

如果有人可以向我解释什么是“身份”以及我如何改变某物的“身份”,我将不胜感激。

(或者,如果您知道一种更好的方式来连续显示警报,这也将非常有帮助。)

提前致谢!

最佳答案

在下面找到按项目使用警报的演示。以及一些关于改变身份的调查结果记录在案。

正如您发现尝试通过用户交互激活的示例(通过点击行)警报工作正常,但以编程方式更改身份,如文档所述,似乎还不稳定,但是警报确实更新了。

使用 Xcode 11.4/iOS 13.4 测试

struct SomeItem: Identifiable { // identifiable item
var id: Int // identity
}

struct DemoAlertOnItem: View {

@State private var selectedItem: SomeItem? = nil

var body: some View {
VStack {
ScrollView (.vertical, showsIndicators: false) {
ForEach (0..<5) { i in

Text("Item \(i)").padding()
.onTapGesture {
self.selectedItem = SomeItem(id: i)

// below simulate change identity while alert is shown
DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
self.selectedItem = nil // works !!

// self.selectedItem?.id = 100 // crash !!
// self.selectedItem = SomeItem(id: 100) // crash !!
}
}
}
}
}
.alert(item: self.$selectedItem) { item in
Alert(title: Text("Alert"), message: Text("For item \(item.id)"), dismissButton: .default(Text("OK")))
}
}
}

关于ios - 'identity' 在 SwifUI 中是什么意思以及我们如何更改某些东西的 'identity',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61183557/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com