【问题标题】:@State property in UIKitUIKit 中的@State 属性
【发布时间】:2020-05-10 14:41:55
【问题描述】:

我定义了一个委托类(我需要在里面读写值)。

这是我做的:

class myClass: NSObject {
private let myBool: (Bool) -> Void

init(onBoolValue: @escaping (Bool) -> Void) {
    self.myBool = onBoolValue
   }
}

下面我有一个带有一些功能等的扩展......

我对 SwiftUI 非常熟悉,但我看到在 viewController 中是这样定义的:

  @State var delegate: myClass! = nil

由于我没有使用 SwiftUI,并且我需要这个 @state 属性才能在 UiKit 中工作,所以这个定义在 UIKit 中的含义是什么?

我尝试过类似的东西:

    weak var delegate: myClass?

但是当我调用它的方法时它不起作用(无法读取或写入,甚至无法在委托中成功调用我的函数)...

【问题讨论】:

    标签: ios swift xcode delegates swiftui


    【解决方案1】:

    没错; @State 仅适用于 SwiftUI,您没有使用 SwiftUI。无论如何,在这种情况下你不需要它,所以只需删除该属性就可以了。

    如果像self.delegate?.doSomething() 这样的调用似乎什么也没做,这通常是因为您没有为delegate 属性分配任何内容,或者因为您给@987654324 分配了错误的东西@ 财产。委托是一种成熟的模式(通常伴随着协议),并且已经在 Stack Overflow 上得到了很好的解释。

    但是,请注意,如果您的委托是一次性的——也就是说,它只是一个辅助类——那么它就不是委托!这是一个帮手,仅此而已。您只需说 let helper = MyClass(...) 就可以了。委托适用于当您在应用程序的其他位置(例如另一个视图控制器)有一个预先存在的实例,并且您想向它寻求建议或偶尔向它发送消息时。

    【讨论】:

    • 您看到我对您将使用的代码的说明了吗?你读过我说的吗?你有没有注意到,当这是一个助手而不是代表时,我不会说weak
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-06
    • 2021-01-31
    • 1970-01-01
    相关资源
    最近更新 更多