热门标签 | HotTags
当前位置:  开发笔记 > IOS > 正文

绑定ObservableObject数组的元素:不建议使用'subscript(_:)'

如何解决《绑定ObservableObject数组的元素:不建议使用'subscript(_:)'》经验,为你挑选了1个好方法。

我正在使用ObservableObject'DataStore',其中包含对象('exampleObject')的数组('exampleList')。

@Published exampleList = [exampleObject]()

我通过@EnvironmentObject('dataStore')调用DataStore。

@EnvironmentObject var dataStore = DataStore()

然后我用

ForEach(0..

要将item的元素绑定到详细信息视图,我正在这样做:

DetailView(itemBinding: $dataStore.exampleList[index])

在Xcode11 beta 4之前,它一直运行良好。

从XCode11 beta 5开始,它仍然可以工作,但是Xcode给我以下警告:

不推荐使用下标(_ :):有关迁移路径,请参见发行说明

我尝试了一些简单的东西,使用了一个简单的@State var包含一个字符串数组,这是同样的问题:调用此数组的元素并尝试将其值用于TextField时:

TextField("test", text: $test[0])

我收到相同的警报。

我不知道该如何解决。这是否意味着我们不再可以在数组内部绑定值?然后,我们如何迭代数组并绑定特定项目?

这是我关于Stackoverflow的第一个问题,如果我的问题太笨拙,我深表歉意。非常感谢您的回答,多年来我一直在使用Stackoverflow,这很了不起,我总是能找到现有的有用的答案,但这是第一次我找不到任何东西,这就是为什么我要问。



1> kontiki..:

Xcode 11,beta 6更新:

好消息!正如我怀疑的那样,在beta 6中,对的Binding符合性MutableCollection已被替换为其他内容。现在,它不再符合MutableCollection,而是使您可以通过访问元素@dynamicMemberLookup。结果是您现在可以继续做下去,$text[3]而不再收到警告!看来这个问题现在可以解决了。

Xcode 11,测试版5。旧答案:

我终于有一些时间对此进行调查。正如我在评论中提到的那样,我认为等到Collection完全删除一致性(或用其他替换)之前,是明智的。但是为了满足我们的好奇心,我在上创建了一个扩展Binding,我认为它可以完成当前Collection一致性的工作。唯一的区别是,我没有通过下标访问,而是实现了一个称为的函数element(_ idx: Int)来获取Binding元素。

如果有一天完全删除了一致性,我可能会更改实现并符合Collection自己。我现在不能这样做,因为它会与现有的(和不建议使用的)实现冲突。就目前而言,我认为这演示了如果您绝对想摆脱警告,该如何处理警告。

只是要清楚。我没有使用此代码。只要我仍然可以通过下标访问元素,我仍然会这样做并忽略警告。这只是出于学术目的。

扩展名是:

extension Binding where Value: MutableCollection, Value.Index == Int {
    func element(_ idx: Int) -> Binding {
        return Binding(
            get: {
                return self.wrappedValue[idx]
        }, set: { (value: Value.Element) -> () in
            self.wrappedValue[idx] = value
        })
    }
}

可以这样使用:

struct MainView: View {
    @Binding var text: [String]

    var body: some View {
        TextField("", text: $text.element(0))
        TextField("", text: $text.element(1))
        TextField("", text: $text.element(2))
    }
}


推荐阅读
author-avatar
不要哭开心就好_723
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有