在我的特定情况下,我在 swiftui 中遇到了一个问题,它不允许在同一个 上添加超过 1 个警报View
。这个问题是已知的,并且已经得到解决,例如通过添加额外的空视图:
https://stackoverflow.com/a/67395026/805701
但还有一个问题——SwiftUI 对这种情况完全没有反应(警报直接跳过)。所以你需要手动搜索所有代码来查找这些可能出现在不同文件中的重复代码。
是否有可能以某种方式指示这些重复出现的位置,例如通过在默认修饰符上添加一个包装器,当该修饰符已经添加到视图中时.alert(...)
抛出该包装器?fatalError
假设您要包装的修饰符名为
coolModifier
。我们将创建一个coolModifierWrapper
。首先,添加一个
ContainerValue
来记录是否coolModifier
已经申请过。我们使用
ContainerValues
而不是环境或首选项值,因为我们不希望此标志从容器中逃逸。也就是说,类似这样的情况不应算作“重复修饰符”。接下来,我们可以编写一个
ViewModifier
读取此容器值的方法,fatalError
如果恰好是,则调用true
。作为扩展,尝试将容器值的类型更改为具有
file
和line
属性的结构,这样您还可以报告的第一次出现位置coolModifierWrapper
。最后,
只要修饰符没有被容器分隔,此方法就能检测出应用于同一视图的重复修饰符。例如,以下代码会崩溃:
如果您确实想检测跨容器的重复使用情况,请使用环境值。