84669 orang belajar
152542 orang belajar
20005 orang belajar
5487 orang belajar
7821 orang belajar
359900 orang belajar
3350 orang belajar
180660 orang belajar
48569 orang belajar
18603 orang belajar
40936 orang belajar
1549 orang belajar
1183 orang belajar
32909 orang belajar
1.我有一个swift项目,在XMPP注册模块,我使用闭包传值(代理会了,学学闭包用法),把注册结果传回控制器。1 初始化
2注册成功赋值
3 作为返回值
4 在控制器中调用
5 结果是不注册他直接不注册,也不连接服务器了。直接返回
6 然后 我找到一个解决办法,一开始给上一种注册结果7 再 返回
8 最后 结果出来了 注册成功 但是 把我给他初始化赋的结果也打印出来了
咋回事啊 ?
光阴似箭催人老,日月如移越少年。
我看你的这个好像和闭包 Closure 并没有关系
Closure
以下解答此次 Crash 的问题很明显, 你对一个值为 nil 的 Optional 类型进行了强制解包
nil
Optional
图5:'fatal error: unexpectedly found nil while unwrapping an optional value'
原因
你的 connectToHost() 应该是异步方法. 该行执行后, 立即就执行了 return registerRes!
connectToHost()
return registerRes!
但此时, 你的连接还进行中还未回调 func xmppStreamDidRegister(sender: XMPPStream!) 方法
func xmppStreamDidRegister(sender: XMPPStream!)
你的 registerRes 还是初始化的时候的值 nil
registerRes
你这整个过程都和闭包没关系……既然你的那个变量肯定会有值,其实可以用叹号替代问号,这样在创建时也不用给它赋值nil,获取时也不用手动解包。好吧我只是说说你代码上的小问题,至于你要问的问题原因楼上已经说了,你可以造个callback,把这个callback挂到connectHost上。只是这样会在每一层都开个洞去传callback……当然也有优雅的解决方案,Github上有个项目叫Async你可以参考,因为我没细看它的实现也不好在这装逼
我看你的这个好像和闭包
Closure
并没有关系以下解答
此次 Crash 的问题很明显, 你对一个值为
nil
的Optional
类型进行了强制解包原因
你的
connectToHost()
应该是异步方法. 该行执行后, 立即就执行了return registerRes!
但此时, 你的连接还进行中还未回调
func xmppStreamDidRegister(sender: XMPPStream!)
方法你的
registerRes
还是初始化的时候的值nil
你这整个过程都和闭包没关系……既然你的那个变量肯定会有值,其实可以用叹号替代问号,这样在创建时也不用给它赋值nil,获取时也不用手动解包。好吧我只是说说你代码上的小问题,至于你要问的问题原因楼上已经说了,你可以造个callback,把这个callback挂到connectHost上。只是这样会在每一层都开个洞去传callback……当然也有优雅的解决方案,Github上有个项目叫Async你可以参考,因为我没细看它的实现也不好在这装逼