1.我有一个swift项目,在XMPP注册模块,我使用闭包传值(代理会了,学学闭包用法),把注册结果传回控制器。
1 初始化
2注册成功赋值
3 作为返回值
4 在控制器中调用
5 结果是不注册他直接不注册,也不连接服务器了。直接返回
6 然后 我找到一个解决办法,一开始给上一种注册结果
7 再 返回
8 最后 结果出来了 注册成功
但是 把我给他初始化赋的结果也打印出来了
咋回事啊 ?
大家讲道理2017-04-17 17:50:47
あなたのこれは閉鎖とは何の関係もないと思います Closure
次の回答
このクラッシュの問題は明らかです。値が nil
Optional
の
図 5: 「致命的なエラー: オプションの値のラップ解除中に予期せず nil が見つかりました」
理由
connectToHost()
は非同期メソッドである必要があります。この行が実行されると、すぐに return registerRes!
しかし、現時点では、接続はまだ進行中であり、まだコールバックされていません func xmppStreamDidRegister(sender: XMPPStream!)
メソッド
registerRes
は初期化中の値のままです nil
巴扎黑2017-04-17 17:50:47
あなたのプロセス全体はクロージャとは何の関係もありません...変数には必ず値があるため、実際には疑問符の代わりに感嘆符を使用できます。そのため、作成時にそれに nil を割り当てる必要はありません。入手時に手動で開梱する必要はありません。そうですね、私はあなたのコードの小さな問題について話しているだけです。あなたが尋ねたい質問の理由については、コールバックを作成し、このコールバックをconnectHostにハングさせることができます。これは、コールバックを渡すために各レイヤーに穴を開けることになるだけです...もちろん、Github には Async というプロジェクトがありますので、それを参照してください。私はその実装を注意深く見ていませんでした。ここで自慢するのは難しいです。