如何在带有参数的 Swift 块中正确处理 Weak Self

2023-11-26

In my TextViewTableViewCell,我有一个变量来跟踪块和一个配置方法,其中块被传入并分配。
这是我的TextViewTableViewCell class:

//
//  TextViewTableViewCell.swift
//

import UIKit

class TextViewTableViewCell: UITableViewCell, UITextViewDelegate {

    @IBOutlet var textView : UITextView

    var onTextViewEditClosure : ((text : String) -> Void)?

    func configure(#text: String?, onTextEdit : ((text : String) -> Void)) {
        onTextViewEditClosure = onTextEdit
        textView.delegate = self
        textView.text = text
    }

    // #pragma mark - Text View Delegate

    func textViewDidEndEditing(textView: UITextView!) {
        if onTextViewEditClosure {
            onTextViewEditClosure!(text: textView.text)
        }
    }
}

当我在我的中使用配置方法时cellForRowAtIndexPath方法,如何在我传入的块中正确使用弱自我。
这是我在没有弱自我的情况下所拥有的:

let myCell = tableView.dequeueReusableCellWithIdentifier(textViewCellIdenfitier) as TextViewTableViewCell
myCell.configure(text: body, onTextEdit: {(text: String) in
   // THIS SELF NEEDS TO BE WEAK  
   self.body = text
})
cell = bodyCell

UPDATE:我使用以下内容进行工作[weak self]:

let myCell = tableView.dequeueReusableCellWithIdentifier(textViewCellIdenfitier) as TextViewTableViewCell
myCell.configure(text: body, onTextEdit: {[weak self] (text: String) in
        if let strongSelf = self {
             strongSelf.body = text
        }
})
cell = myCell

当我做[unowned self]代替[weak self]并取出if声明,应用程序崩溃。关于如何使用它的任何想法[unowned self]?


If self在闭包使用中可能为零【弱小的自己】.

If self在闭包使用中永远不会为零[无主的自我].

如果使用时崩溃[无主的自我]我猜想 self 在该闭包中的某个时刻为零,这就是为什么你必须选择【弱小的自己】反而。

我真的很喜欢手册中有关使用的整个部分strong, weak, and unowned在闭包中:

https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/AutomaticReferenceCounting.html

注意:我使用了这个词closure代替block这是较新的 Swift 术语:

ios 中块(Objective C)和闭包(Swift)之间的区别

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在带有参数的 Swift 块中正确处理 Weak Self 的相关文章

随机推荐

  • 从下拉列表中获取旧值和新值

    我试图简单地获取以前的值 以及从下拉列表中新选择的值 在此示例中 下拉列表中预先填充了为用户分配的当前组 当下拉列表更改时 我希望能够返回旧值和新值 我已经可以获得旧值 但我不知道如何返回新值 控制器代码 User Object userA
  • es6导入三个.js

    我的 es6 工作流程使用 babel 和 babel plugin transform es2015 modules system js 来only转换模块导入 导出以与 system js 一起使用 我只是对所有 es6 功能使用 绿色
  • VS2013:查找资源字典时出错

    我刚刚拿到VS2013并打开了我的VS2010项目 但是现在我看不到任何 xaml 设计 问题是样式没有被应用
  • 添加多个浮点变量时最小化浮点误差

    在我的 C 应用程序中 我有一个范围 0 1 内的双精度向量 我必须尽可能准确地计算其总数 感觉这个问题之前应该已经解决了 但我找不到任何东西 显然 如果向量大小很大并且有些项目明显小于其他项目 则迭代向量上的每个项目并执行 sum vec
  • 播种default_random_engine?

    我使用的是 Visual Studio 2010 不支持
  • 如何编写 cpp __DIR__ 宏,类似于 __FILE__

    The FILE and LINE 宏内置于C预处理器 通常用于打印带有文件名和行号的调试输出 我需要类似的东西 但只有路径末尾的目录名称 例如 如果我的代码位于 home davidc some path to some code foo
  • Mobile safari 对大图像进行下采样。如何挽留?

    我有一个 HTML 页面 其中包含 1675 像素 x 2640 像素的图像 我尝试在 iPad 上查看它 显然移动 safari 降低了图像的采样率 我们想要展示高质量的图像 但 Safari 限制了这一点 我一直在寻找保留图像大小的解决
  • Java中文件名的编码

    我正在嵌入式 Linux 平台上运行一个小型 Java 应用程序 将Java VM JamVM替换为OpenJDK后 带有特殊字符的文件名无法正确存储 特殊字符 如变音符号 将替换为问号 这是我的测试代码 import java io Fi
  • 为什么反应本机项目是在打字稿中创建的?我想要app.js

    我是 React Native 的初学者 我正在使用 React Native CLI 创建一个 React Native 项目 但项目是使用 app ts 创建的 我想在 javascript 版本中创建项目 我尝试过 React Nat
  • 多重继承不明确的基类

    考虑代码 struct Base struct Derived public Base struct A public Base struct B public A public Base struct C public A public
  • 如何限制 jQuery 事件的回调?

    好的 所以我像在谷歌中一样进行搜索 您在输入中键入文本 它会立即为您提供条目 但我不喜欢这样 我用类似的东西 TEXTINPUT keyup function 当用户输入速度非常快时 它会多次连接到数据库 是否有可能 只有当用户停止输入 1
  • 等待 Workbook.RefreshAll() (C#)

    我想循环遍历一个目录 使用 C 并刷新其中的所有 Excel 工作表 我用 Workbook RefreshAll 我该如何等待Workbook RefreshAll 声明结束 问题是 我打开FileA then Workbook Refr
  • 一个 Java 类中最多可以使用多少个 lambda?

    这是一个纯粹概念性的问题 Java 8 中的 Lambda 被转换为使用以下方式调用的方法invokedynamic 如果 JVM 对一个类可以拥有的最大方法数有限制 这是否意味着一个类中使用的 lambda 最大数量也受到 JVM 的严格
  • 使用 redux 时,应该如何在 React 组件中处理取消订阅?

    在我的组件中 我有以下内容 componentWillMount function this unsubscribe store subscribe function this setState message store getState
  • 如何将Scala Squeryl ORB与play 2.0框架集成?

    我正在尝试将 Squeryl ORB 与 play 2 0 框架一起使用 但是在调用时DB getConnection 在初始化期间我得到 BadPath 路径参数 无效路径 找不到defaultdb的数据源 路径表达式中不允许使用令牌 如
  • 从 device_vector 中删除元素

    推力 device vector 值 推力 device vector 键 初始化后 keys包含一些等于 1的元素 我想删除键中和值相同位置的元素 但不知道并行如何处理 可能有很多方法可以做到这一点 一种可能的方式 使用模板版本thrus
  • Android WebSocket 服务进行多个连接

    我创建了一个 Web 套接字服务 但它不断建立多个连接 我只希望应用程序建立一个连接 除非网络连接断开然后建立另一个连接 但现在 如果我按下手机上的主页按钮 它就会建立一个连接 然后返回应用程序 它将建立另一个连接 谢谢你们的帮助 在创建
  • GNU Parallel:将文件拆分为子文件

    Goal 使用 GNU Parallel 将大 gz 文件拆分为子文件 由于服务器有 16 个 CPU 因此创建 16 个子级 每个子项最多应包含 N 行 这里 N 104 214 420 行 子项应采用 gz 格式 输入文件 名称 fil
  • 获取字符串“600sp”整数部分的最佳方法?

    我有一个字符串 比如 600sp 我希望从中获取整数部分 600 If I do Integer valueOf 600sp 由于字符串中遇到非数字值 s 我收到异常 获取整数部分最快最干净的方法是什么 Thanks 如果您的字符串格式始终
  • 如何在带有参数的 Swift 块中正确处理 Weak Self

    In my TextViewTableViewCell 我有一个变量来跟踪块和一个配置方法 其中块被传入并分配 这是我的TextViewTableViewCell class TextViewTableViewCell swift impo