cari

Rumah  >  Soal Jawab  >  teks badan

ios - swift使用闭包传值

1.我有一个swift项目,在XMPP注册模块,我使用闭包传值(代理会了,学学闭包用法),把注册结果传回控制器。
1 初始化

2注册成功赋值

3 作为返回值


4 在控制器中调用

5 结果是不注册他直接不注册,也不连接服务器了。直接返回

6 然后 我找到一个解决办法,一开始给上一种注册结果

7 再 返回

8 最后 结果出来了 注册成功
但是 把我给他初始化赋的结果也打印出来了

咋回事啊 ?

大家讲道理大家讲道理2890 hari yang lalu383

membalas semua(2)saya akan balas

  • 大家讲道理

    大家讲道理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

    1. connectToHost() anda hendaklah kaedah tak segerak Selepas baris ini dilaksanakan, return registerRes!

    2. dilaksanakan serta-merta.
    3. Tetapi pada masa ini, sambungan anda masih dalam proses dan belum dipanggil semula func xmppStreamDidRegister(sender: XMPPStream!) kaedah

    4. registerRes anda masih menjadi nilai semasa permulaan nil

      balas
      0
  • 巴扎黑

    巴扎黑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.

    balas
    0
  • Batalbalas