我没有发布整个代码,因为它实在太大了。无论如何,它是以这种方式构建的用户注册。
有一个模态,其子视图是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
会产生警告:"捕捉自我从未使用过"。我究竟做错了什么?
答案 0 :(得分:1)
如果您没有在异步块中使用self
,那么您将明显收到此警告。请尝试使用_
代替self
。
答案 1 :(得分:0)
查看什么是swift捕获列表,查看此示例...
var i = 25
var cl = {print(i)}
var clc = {[i] in print(i)}
i = 35
cl() // 35
clc() // 25
警告信息“捕获自己从未使用过”因此不言自明。你不需要把自己放在捕获列表中,因为你没有在那里使用它