通过使用泛型将结构作为参数传递来关闭回调
Closure for call back by using Generics to pass struct as parameter
我正在尝试使用闭包作为回调机制将选定数据从子视图控制器发送到父视图控制器。在 UI 中有四个下拉菜单,并且使用了该子视图控制器。现在,在每个下拉列表中,都会将一个结构模型 class 传递给它,其中包含它们各自的数据。所以现在,当将选定的数据传回父视图时,需要使用它们所尊重的结构 classes。
为了更好地理解代码,下面是我目前尝试过的代码:
struct Roles : Codable {
let roleId : Int?
let roleName, roleContent : String?
private enum Codingkeys: String, CodingKey
{
case roleId = "roleId"
case roleName = "roleName"
case roleContent = "roleContent"
}
}
// 子视图控制器
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()
}
// 父视图控制器
childEditTaskViewController?.completionHandler = { text in
// print("text = \(text)")
strSelectedValue = text
}
错误:
Cannot convert value of type 'Roles' to expected argument type 'String
以上是我到目前为止所尝试的
将您的 clouser 更改为:
var completionHandler:((Roles) -> Void)?
那么可以这样调用:
childEditTaskViewController?.completionHandler = { role in
// print("text = \(text)")
strSelectedValue = role.roleName // or role. roleContent
}
更新:我这样做是因为我还必须 return 结果
var completionHandlerRol : ((Roles) -> ())?
我正在尝试使用闭包作为回调机制将选定数据从子视图控制器发送到父视图控制器。在 UI 中有四个下拉菜单,并且使用了该子视图控制器。现在,在每个下拉列表中,都会将一个结构模型 class 传递给它,其中包含它们各自的数据。所以现在,当将选定的数据传回父视图时,需要使用它们所尊重的结构 classes。
为了更好地理解代码,下面是我目前尝试过的代码:
struct Roles : Codable {
let roleId : Int?
let roleName, roleContent : String?
private enum Codingkeys: String, CodingKey
{
case roleId = "roleId"
case roleName = "roleName"
case roleContent = "roleContent"
}
}
// 子视图控制器
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()
}
// 父视图控制器
childEditTaskViewController?.completionHandler = { text in
// print("text = \(text)")
strSelectedValue = text
}
错误:
Cannot convert value of type 'Roles' to expected argument type 'String
以上是我到目前为止所尝试的
将您的 clouser 更改为:
var completionHandler:((Roles) -> Void)?
那么可以这样调用:
childEditTaskViewController?.completionHandler = { role in
// print("text = \(text)")
strSelectedValue = role.roleName // or role. roleContent
}
更新:我这样做是因为我还必须 return 结果
var completionHandlerRol : ((Roles) -> ())?