Swift Обработчики завершения не могут преобразовать значение типа в указанный тип

Я пытаюсь реализовать обработчики завершения, но получаю эту ошибку:

не может преобразовать значение типа в указанный тип.

Вот мой код:

override func viewDidLoad() {
    super.viewDidLoad()
    let sss : String  = doSomethingElse { (data) in

    }
    print(sss)
}

func doSomethingElse(completion:(data:String) -> Void) {

    let s = "blablabla"

    print(s)
    completion(data:s)
}

В этой строке я получаю сообщение об ошибке:

let sss : String  = doSomethingElse { (data) in

введите здесь описание изображения

Кто-нибудь из вас знает, почему я получаю эту ошибку?

Я очень признателен за вашу помощь.


person user2924482    schedule 01.06.2016    source источник
comment
Потому что вы объявили sss как String, а затем попытались назначить ему замыкание.   -  person Paulw11    schedule 02.06.2016


Ответы (1)


Вы объявили sss String, но затем вы попытались назначить ему закрытие; поэтому компилятор выдает ошибку.

Я думаю, что вы пытались сделать это, назначьте закрытие sss, а затем передайте это закрытие doSomethingElse:

func viewDidLoad() {
    super.viewDidLoad()

    let sss : ((data:String) -> Void) = { data in
      print ("data is \(data)")
    }

    doSomethingElse(sss)
}

func doSomethingElse(completion:(data:String) -> Void) {

    let s = "blablabla"

    print(s)
    completion(data:s)
}

что даст следующий результат:

блаблабла

данные блаблабла

person Paulw11    schedule 01.06.2016