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라는 프로젝트가 있는데, 그 구현을 주의 깊게 살펴보지 않았기 때문입니다. 여기서 과시하기가 어렵습니다.