执行 segue 并作为发件人发送元组
perform segue and send tuple as sender
我一直在尝试在执行 segue 时为发送者对象设置一个元组,例如:
performSegue(withIdentifier: "", sender: ("hello", "hello2"))
但在 override func prepare(for segue: UIStoryboardSegue, sender: Any?)
中,当我尝试将发件人转换为 (String, String)
时出现转换异常
似乎只有元组的第一个元素在sender
。
我希望因为发件人的类型是 Any?
我可以使用元组作为变量吗?
有没有其他人遇到过这种情况?
根据 documentation,发送者应该是启动 segue 的对象;这不是您填充数据以传递到目的地的地方 viewcontroller。相反,您应该将它放在视图控制器中的 属性 中,然后使用它在 prepareForSegue 中设置目标视图控制器的属性。
总之,为了回答您的问题,您是如何从 Any 中回退的?到 (String, String)
的元组
let b = ("g", "f")
let a: Any? = b
if let c = a as? (String, String) {
print (c)
}
即使参数 sender 不应该用于传递任何数据或者这可能不是一个好的做法,我发现它有用且干净。我认为如果它简短而简单,它不会让工作团队的人感到困惑。我认为 Apple 的 API 以某种方式获得 Obj-C 对待它的方式。
我已经尝试了一些方法来传递它并找到了我会使用的方法:
数组中:
let tuple = ("string1", "string2")
performSegue(withIdentifier: "theSegue", sender: [tuple])
所以你得到:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let data = sender as? [Any] {
if let first = data.first {
print(first)
}
}
}
或作为字典:
let tuple = ("string1", "string2")
performSegue(withIdentifier: "theSegue", sender: ["userInfo":tuple])
所以你得到:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let data = sender as? [String:Any] {
if let userInfo = data["userInfo"] {
print(userInfo)
}
}
}
我一直在尝试在执行 segue 时为发送者对象设置一个元组,例如:
performSegue(withIdentifier: "", sender: ("hello", "hello2"))
但在 override func prepare(for segue: UIStoryboardSegue, sender: Any?)
中,当我尝试将发件人转换为 (String, String)
似乎只有元组的第一个元素在sender
。
我希望因为发件人的类型是 Any?
我可以使用元组作为变量吗?
有没有其他人遇到过这种情况?
根据 documentation,发送者应该是启动 segue 的对象;这不是您填充数据以传递到目的地的地方 viewcontroller。相反,您应该将它放在视图控制器中的 属性 中,然后使用它在 prepareForSegue 中设置目标视图控制器的属性。
总之,为了回答您的问题,您是如何从 Any 中回退的?到 (String, String)
的元组let b = ("g", "f")
let a: Any? = b
if let c = a as? (String, String) {
print (c)
}
即使参数 sender 不应该用于传递任何数据或者这可能不是一个好的做法,我发现它有用且干净。我认为如果它简短而简单,它不会让工作团队的人感到困惑。我认为 Apple 的 API 以某种方式获得 Obj-C 对待它的方式。
我已经尝试了一些方法来传递它并找到了我会使用的方法:
数组中:
let tuple = ("string1", "string2")
performSegue(withIdentifier: "theSegue", sender: [tuple])
所以你得到:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let data = sender as? [Any] {
if let first = data.first {
print(first)
}
}
}
或作为字典:
let tuple = ("string1", "string2")
performSegue(withIdentifier: "theSegue", sender: ["userInfo":tuple])
所以你得到:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let data = sender as? [String:Any] {
if let userInfo = data["userInfo"] {
print(userInfo)
}
}
}