相关疑难解决方法(0)

我们总是在Swift中使用[unowned self]内部封闭

在WWDC 2014会议403 中级Swift成绩单中,有以下幻灯片

在此输入图像描述

在这种情况下,发言人说,如果我们不在[unowned self]那里使用,那将是内存泄漏.这是否意味着我们应该始终使用[unowned self]内部封闭?

Swift Weather应用程序的ViewController.swift的第64行,我不使用[unowned self].但我通过使用一些@IBOutletself.temperature和更新UI self.loadingIndicator.它可能没问题,因为@IBOutlet我所定义的都是weak.但为了安全起见,我们应该一直使用[unowned self]吗?

class TempNotifier {
  var onChange: (Int) -> Void = {_ in }
  var currentTemp = 72
  init() {
    onChange = { [unowned self] temp in
      self.currentTemp = temp
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

ios automatic-ref-counting swift

455
推荐指数
7
解决办法
14万
查看次数

Swift Combine - 如何获得为 UITextField 的文本属性的每个字符更改提供事件的发布者

我注意到

textField.publisher(for: \.text)
Run Code Online (Sandbox Code Playgroud)

在编辑完成时传递事件,但不是针对每个字符/编辑更改。我如何获得一个发布者,它会为每次更改发送事件?在 ReactiveSwift 中,它将是

textField.reactive.continousTextValues()
Run Code Online (Sandbox Code Playgroud)

而在 RxSwift 中,它只是(如何在 RxSwift 中每次 UITextField 文本属性更改时获得信号

textField.rx.text
Run Code Online (Sandbox Code Playgroud)

我采取的方法:

  • 检查publisher(for:options:)方法,但对于所需的结果没有合适的选项。
  • 添加目标/操作textField.addTarget(self, action: #selector(theTextFieldDidChange), for: .editingChanged)UITextField 文本更改事件
  • 通过接口构建器连接操作,与上一步基本相同,这两者都会导致额外的工作和混乱的代码。
  • 观看 2019 年关于 Combine 的 WWDC 视频。他们没有处理文本字段,而是使用@Published变量,隐藏值实际上来自 - (或者我错过了什么?)。

我目前不知道如何做到这一点,我觉得有回到 ReactiveSwift 的趋势,但我想问你,在退步之前。

uitextfield ios swift combine

7
推荐指数
3
解决办法
2853
查看次数