【问题标题】:'weak' may only be applied to class and class-bound protocol types, not 'ContentView' what im missing?“弱”可能仅适用于类和类绑定协议类型,而不是“ContentView”我缺少什么?
【发布时间】:2020-04-23 20:40:08
【问题描述】:

我正在尝试运行此代码,但我在关闭时收到警告...任何帮助解决它? 为了在后台线程中运行函数过滤器,我建议使用过滤器函数运行 init。

但在关闭时收到此警告:

'weak' 可能只适用于类和类绑定协议类型,而不适用于 'ContentView'

import SwiftUI

struct ContentView: View {
    @ObservedObject var dm: DataManager
    @State private var searchTerm : String = ""
    @State var filteredAirports: [AirportModel] = []
    init(dataM: DataManager) {
        self.dm = dataM
        dm.filter(valoreSearhed: searchTerm, arrayTosearh: dm.airportVector, closure: { [weak self] in
            self?.filteredAirports = $0 })
    }
    var body: some View {
        VStack {
            SearchBar(text: $searchTerm)

            List {
                ForEach(filteredAirports) { valore in
                    Text(valore.aptICAO)
                }
            }
        }
    }
}


struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView(dataM: DataManager())
    }
}

【问题讨论】:

    标签: swift closures swiftui


    【解决方案1】:

    删除[weak self],因为它用于类等引用类型,而ContentView 是值类型struct

    【讨论】:

    • 明白了,问题是如果我删除它我会收到警告 Escaping closures mutating 'self' parameter
    • @DamianoMiazzi 正确;你不能以这种方式改变结构。目前还不太清楚您要做什么,但您可能希望在此处使用 Binding 而不是回调。视图只是描述事物的数据。见stackoverflow.com/questions/59510620/…
    【解决方案2】:

    weak 是引用类型的修饰符(即弱指针,当所有引用被释放时可以为空)。但是你的ContentViewstruct,是值类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-26
      • 2018-05-21
      • 2018-02-07
      • 2016-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多