我没有发布整个代码,因为它实在是太大了。反正就是这样建的用户注册。
有一个模态,它的 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/