我在尝试执行segue时尝试将一个元组设置为sender对象:
performSegue(withIdentifier: "", sender: ("hello", "hello2"))
但是在override func prepare(for segue: UIStoryboardSegue, sender: Any?)
内部我尝试将发件人转换为(String, String)
似乎只有元组的第一个元素在sender
。
我希望发件人的类型为Any?
,我可以使用元组作为变量吗?
还有其他人经历过这个吗?
答案 0 :(得分:2)
根据documentation,发件人应该是发起segue的对象;这不是您填充数据传递到目标viewcontroller的地方。相反,您应该将它放在视图控制器的属性中,然后使用它在prepareForSegue中设置目标视图控制器的属性。
无论如何,要回答你的问题,这是你如何从Any回来的?到(String,String)元组
let b = ("g", "f")
let a: Any? = b
if let c = a as? (String, String) {
print (c)
}
答案 1 :(得分:1)
即使参数发送者不应该被用来传递任何数据,或者它可能不是一个好习惯,我发现它很有用且干净。如果简短而简单的话,我认为它不会让工作团队的人感到困惑。我认为Apple的某种方式可以像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)
}
}
}