Закрытие для обратного вызова с использованием Generics для передачи struct в качестве параметра - PullRequest
0 голосов
/ 13 февраля 2020

Я пытаюсь отправить выбранные данные из дочернего контроллера представления в родительский контроллер представления, используя замыкание в качестве механизма обратного вызова. В пользовательском интерфейсе используется четыре раскрывающихся списка, и для этого используется дочерний контроллер View. Теперь в каждом раскрывающемся списке передается класс структурной модели, содержащий соответствующие данные. Поэтому теперь при передаче обратно выбранных данных в родительское представление необходимо использовать их уважаемые классы структуры.

Для лучшего понимания код ниже того, что я пробовал до сих пор:

struct Roles : Codable {
let roleId : Int?
let roleName, roleContent : String?

private enum Codingkeys: String, CodingKey
{
    case roleId = "roleId"
    case roleName = "roleName"
    case roleContent = "roleContent"

}
}

// ChildViewController

 var myRoless = [Roles]()
 var completionHandler:((String) -> Int)?

 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let result = completionHandler?(myRoless[indexPath.row])

    print("completionHandler returns... \(String(describing: result))")

    removeAnimate()
}

// ParentViewController

childEditTaskViewController?.completionHandler = { text in

          //  print("text = \(text)")
            strSelectedValue = text
 }

Ошибка:

Cannot convert value of type 'Roles' to expected argument type 'String

Это то, что я пробовал до сих пор

1 Ответ

0 голосов
/ 13 февраля 2020

Измените ваш clouser на это:

var completionHandler:((Roles) -> Void)?

, тогда вы можете назвать его следующим образом:


childEditTaskViewController?.completionHandler = { role in

      //  print("text = \(text)")
      strSelectedValue = role.roleName // or role. roleContent
 }

Обновление: я сделал так, потому что я должен вернуть результат также

var completionHandlerRol : ((Roles) -> ())?
...