ios - 通过使用泛型将结构作为参数传递来关闭回调
问题描述
我正在尝试使用闭包作为回调机制将选定的数据从子视图控制器发送到父视图控制器。在具有四个下拉菜单的 UI 中,使用了该子视图控制器。现在,在每个下拉菜单中,都会将一个结构模型类传递给它,其中包含它们各自的数据。所以现在,当将选定的数据传递回父视图时,需要使用他们尊重的结构类。
为了更多地理解代码,我到目前为止尝试过的代码如下:
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
}
更新:我这样做是因为我也必须返回结果
var completionHandlerRol : ((Roles) -> ())?
推荐阅读
- apache-kafka - 如何在 Kafka 和 Flink 环境中测试性能?
- ios - iOS:如何检查选择的日期时间是否是夏令时的有效时间?
- python-3.x - 如果在 TensorFlow 对象检测 API 中检测到相同的对象,则仅打印一次类名
- python - 什么时候不做重复线性变换的特征分解
- javascript - 无法从 VueJS 表单发送项目列表
- django - 添加 User 的相关对象,并在 django admin 的 User 模型中显示
- c - 从填充为 0 的数组加载到 256 位 AVX2 寄存器
- c# - 问题在启动文件上注册对象和接口更具体地在 ConfigureServices 方法中,应用程序不执行
- excel - 想清除一定范围内的形状但出现应用错误
- nginx - 尝试使用 nginx 重定向到 API 网关时出现 403 响应