SwiftUI - 绑定到选择器的变量与选择器的选定值不匹配

Posted

技术标签:

【中文标题】SwiftUI - 绑定到选择器的变量与选择器的选定值不匹配【英文标题】:SwiftUI - variable bound to picker does not match selected value of the picker 【发布时间】:2020-08-25 17:47:01 【问题描述】:

在此代码中,repDuration 是一个 int,每当我在选择器中选择一个值时,repDuration 将是相同的值减 1,尽管标签等于数字。当我将 repDuration 设为 String 而不是 Int 时,问题就消失了,如果我想将 repDuration 保留为 Int,有人可以解释如何让值匹配吗?

Picker("Duration", selection: self.$item.repDuration) 
         ForEach(1..<366)  number in
            Text("\(number)").tag(number)
         

【问题讨论】:

【参考方案1】:

您需要您的迭代器符合 .Identifiable 协议,或者在 ForEach 调用中指定一个 id,如下所示:

Picker("Duration", selection: self.$item.repDuration) 
     ForEach(1..<366, id: \.self)  number in
        Text("\(number)").tag(number)
     

否则,swift 将返回您的范围序列的索引,而不是值。

【讨论】:

以上是关于SwiftUI - 绑定到选择器的变量与选择器的选定值不匹配的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI 中日期选择器的用户自定义通知时间

xamarin 表单 - 与选择器的两种方式绑定 - 为啥我不能从后面的代码更新选择器?

SwiftUI Picker Help -- 根据另一个选择器的选择填充选择器

来自先前选择器的选择器值 - CoreData/SwiftUI

SwiftUI:如何设置时间选择器的范围以包含午夜?

带有选择器的 SwiftUI 列表:选择不适用于自定义类型(macOS)