ios - swift使用闭包传值
大家讲道理
大家讲道理 2017-04-17 17:48:47
0
2
381

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

2注册成功赋值

3 作为返回值


4 在控制器中调用

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

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

7 再 返回

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

咋回事啊 ?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

모든 응답(2)
大家讲道理

귀하의 이번 일은 폐쇄와 관련이 없는 것 같습니다 Closure

다음 답변
이 충돌의 문제는 분명합니다. 값이 nilOptional

유형의 압축을 강제로 풀었습니다.

그림 5: '치명적인 오류: 선택적 값 래핑을 해제하는 동안 예기치 않게 nil이 발견됨'

이유

  1. connectToHost()은 이 줄이 실행된 후 return registerRes!

  2. 이 즉시 실행됩니다.
  3. 그러나 현재 연결이 진행 중이며 아직 콜백되지 않았습니다. func xmppStreamDidRegister(sender: XMPPStream!) 방법

  4. 초기화 중 registerRes 값은 여전히 ​​nil입니다.

巴扎黑

전체 프로세스는 클로저와 관련이 없습니다... 변수가 확실히 값을 가지므로 실제로 물음표 대신 느낌표를 사용할 수 있으므로 생성할 때 nil을 할당할 필요가 없습니다. 그것을 얻을 때 수동으로 압축을 풀 필요가 없습니다. 글쎄, 나는 당신의 코드에 있는 작은 문제에 대해 이야기하고 있습니다. 질문하고 싶은 이유는 위에 언급되어 있습니다. 콜백을 만들고 connectHost에 이 콜백을 걸 수 있습니다. 이것은 콜백을 전달하기 위해 각 레이어에 구멍을 열게 될 뿐입니다... 물론 Github에는 Async라는 프로젝트가 있는데, 그 구현을 주의 깊게 살펴보지 않았기 때문입니다. 여기서 과시하기가 어렵습니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿