Rumah > Soal Jawab > teks badan
1.我有一个swift项目,在XMPP注册模块,我使用闭包传值(代理会了,学学闭包用法),把注册结果传回控制器。
1 初始化
2注册成功赋值
3 作为返回值
4 在控制器中调用
5 结果是不注册他直接不注册,也不连接服务器了。直接返回
6 然后 我找到一个解决办法,一开始给上一种注册结果
7 再 返回
8 最后 结果出来了 注册成功
但是 把我给他初始化赋的结果也打印出来了
咋回事啊 ?
大家讲道理2017-04-17 17:50:47
Saya rasa ini milik anda tiada kaitan dengan penutupan Closure
Jawapan berikut
Masalah dengan Ranap ini jelas, Anda terpaksa membongkar jenis nil
dengan nilai Optional
Rajah 5: 'ralat maut: tiada jangkaan ditemui semasa membuka balutan nilai pilihan'
Sebab
connectToHost()
anda hendaklah kaedah tak segerak Selepas baris ini dilaksanakan, return registerRes!
Tetapi pada masa ini, sambungan anda masih dalam proses dan belum dipanggil semula func xmppStreamDidRegister(sender: XMPPStream!)
kaedah
registerRes
anda masih menjadi nilai semasa permulaan nil
巴扎黑2017-04-17 17:50:47
Seluruh proses anda tiada kaitan dengan penutupan... Memandangkan pembolehubah anda pasti akan mempunyai nilai, anda sebenarnya boleh menggunakan tanda seru dan bukannya tanda soal, jadi anda tidak perlu menetapkan nol padanya semasa membuat dan anda tidak perlu membongkarnya secara manual apabila mendapatkannya. Baiklah, saya hanya bercakap tentang masalah kecil dalam kod anda Mengenai sebab untuk soalan yang anda ingin tanyakan, ia telah disebutkan di atas. Anda boleh membuat panggilan balik dan menggantung panggilan balik ini pada connectHost. Cuma ini akan membuka lubang pada setiap lapisan untuk menghantar panggilan balik... Sudah tentu, terdapat penyelesaian yang elegan Terdapat projek di Github yang dipanggil Async yang boleh anda rujuk, kerana saya tidak melihat pelaksanaannya dengan teliti dan sukar untuk menunjuk-nunjuk di sini.