swift - 从未使用过捕获 self

标签 swift queue alert

我没有发布整个代码,因为它实在是太大了。反正就是这样建的用户注册。

有一个模态,它的 child 是一个 pageViewController:

  • 第一页为登录;
  • 第二页是注册;

从登录您可以到达注册,一旦注册,pageViewController 应自动转换到第一页,以便用户可以使用他的新凭据登录。

用户注册过程由按钮和 Alamofire 管理:单击按钮后,将验证用户在文本字段中插入的值,然后我开始发布请求,向服务器发送数据并接收 JSON 数据等一下。

一切都很简单(抱歉说多了),但最后,在我收到 JSON 后,这里发生了一些奇怪的事情:

let j = JSON as! NSDictionary
let userStatus = j.object(forKey: "status")!

    if((userStatus as! Int) == 0){

        //
        print("user registerd")

        let alert = UIAlertController(title: "Registration ok", message: "Registration OK", preferredStyle:UIAlertControllerStyle.alert)

        let okAlert = UIAlertAction(title:"OK", style: .default, handler: {action in v.scrollToPreviousViewController() })

        alert.addAction(okAlert)

        self.present(alert, animated: true, completion: nil)

这段代码应该做什么?一旦用户点击警报按钮,pageviewcontroller 应该返回到登录屏幕的动画。

会发生什么?它返回那里但没有动画。

这让我认为我应该避免“污染”保留给 GUI 的全局线程。而且,事实上,我试图将所有代码放在一个:

DispatchQueue.main.async { [unowned self] in

没有任何成功。

然后,我尝试了另一件事:

let okAlert = UIAlertAction(title:"OK", style: .default, handler:
                                            {action in DispatchQueue.main.async { [unowned self] in v.scrollToPreviousViewController() }})

我不太明白为什么,但这实际上有效并消除了动画问题。

但是 unowned self 会生成一个警告:“Capture self was never used”。我究竟做错了什么?

最佳答案

如果您没有在异步 block 中使用 self 那么您显然会收到此警告。请尝试使用 _ 而不是 self

关于swift - 从未使用过捕获 self ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40404919/

相关文章:

swift - 如何将多个 View Controller 链接到同一个导航教程

swift - 尝试用 Swift 模拟 C 联合会给出运行时异常

ios - 带有参数的本地化字符串出现 EXC_BAD_ACCESS 崩溃

node.js - Azure Nodejs SDK : long polling for queue message listener

java - 当Java LinkedBlocking Queue只有一个元素时,如果同时放入和取出会发生什么?

java - 在 Java 中使用队列解决迷宫问题

javascript - 触摸屏滚动禁用

swift - 如何使用 AlertView 进行搜索?

swift - 使用 Sprite Kit 在 Swift 中隐藏或显示 Google Ad View

php - 如果表单没有有效值则显示一个 alert() 对话框