我的代码生成一个显示在视图控制器1上的标签上的元组。我尝试将标签从vc1结构化为vc2但是没有保留顺序。我想做的就是在VC 2上复制vc 1上显示的确切顺序和元组的方式。
查看控制器1
import UIKit
var number = [Int]()
var yourArray = [String]()
class ViewController: UIViewController {
@IBOutlet var labez: UILabel!
@IBOutlet var textA: UITextField!
@IBOutlet var textB: UITextField!
@IBAction func move(_ sender: Any) {
bad.mm = [String( labez.text ?? "")]
}
@IBAction func store(_ sender: Any) {
yourArray.append((textA.text!))
number.append(Int(textB.text!)!)
let tuples = zip(yourArray,number)
let sorted = tuples.sorted(by: { this, next in
if this.0 < next.0 {
return true
} else if this.0 == next.0 {
return this.1 < next.1
} else {
return false
}
})
print(sorted)
labez.text = sorted.map { " \($0)" }.joined(separator:"\n")
bad.mm = [String(describing: sorted.map { " \($0)" }.joined(separator:"\n")
)]
}
struct bad {
static var mm = [String]()
}
}
查看控制器2
import UIKit
class ViewController2: UIViewController {
@IBOutlet var benCarson: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
benCarson.text = (String(describing: ViewController.bad.mm))
}
}
答案 0 :(得分:0)
为什么不使用prepare(for segue:
而不是结构来传递元组。
你可以这样做: 在ViewController中:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// give your segue an id (in the interface builder)
if segue.identifier == "mySegue" ,
let nextScene = segue.destination as? ViewController2 {
nextScene.yourTuples = yourArray // or anything else
}
}
在ViewController2中:
class ViewController2: UIViewController {
val yourTuples: [String]()!
@IBOutlet var benCarson: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
benCarson.text = (String(describing: ViewController.bad.mm))
}
}
答案 1 :(得分:0)
除了我对你如何设计数据和命名约定的批评。我相信你想要的是 ASSIGN 你的bad.mm
而不是 APPEND 。
当您第一次向bad.mm
输入值(a, 2)
时,会发生什么。然后当追加时,将已排序的数组(a, 1), (a, 2)
添加到现有字符串中,使其成为(a, 2), (a, 1), (a, 2)
如果您指定它,它现在将只是新的排序数组{ {1}}。
分配更改
(a, 1), (a, 2)
在bad.mm.append(String(describing: sorted.map { " \($0)" }.joined(separator:"\n"))
课程中
ViewController
在bad.mm = String(describing: sorted.map { " \($0)" }.joined(separator:"\n")
ViewController
您的move
函数执行类似的操作APPENDS
到bad.mm
您可能想要分配的内容。但是,您为其指定了UITextField.Text
属性,该属性是可选的。使用??
运算符,您可以在提供默认值的同时解包此可选项。空字符串通常是一个很好的默认值。因此,我建议将@IBAction func move
内的行更改为以下内容:
bad.mm = labez.text ?? ""
或者只是实际删除此行,因为您在早期函数中同时分配了bad.mm和labez.text。但这就是为什么你在文本周围得到optional()
。
这应该会给你你想要的效果。你的“元组”没有以正确的顺序传递的原因是你没有从一个VC到另一个VC抓取已排序的元组,你正在从一个VC到另一个VC抓取一个格式不正确的字符串。考虑直接传递已排序的元组,然后在ViewControllers
中单独格式化字符串以减少混淆。