• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 通过时结构不保持元组顺序(swift3)

[复制链接]
菜鸟教程小白 发表于 2022-12-11 18:38:43 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我的代码生成了一个元组,它显示在 View Controller 1 的标签上。我尝试将标签从 vc1 构造到 vc2,但没有保留顺序。我要做的就是复制确切的顺序和元组在 vc 1 上的显示方式,在 VC 2 上。

查看 Controller 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]()

      }
    }

enter image description here

View Controller 2

    import UIKit

class ViewController2: UIViewController {

@IBOutlet var benCarson: UILabel!
override func viewDidLoad() {
    super.viewDidLoad()

    benCarson.text = (String(describing: ViewController.bad.mm))
}





}

enter image description here



Best Answer-推荐答案


除了我对您如何设计数据和命名约定的批评之外。我相信你想要的是ASSIGN你的bad.mm而不是APPEND

发生的情况是,当您第一次向 bad.mm 输入值时,它是 (a, 2)。然后,当它被 附加 时,您将排序数组 (a, 1), (a, 2) 添加到现有字符串中,使其成为 (a, 2) , (a, 1), (a, 2) 如果您分配它,它现在将只是新的排序数组 (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 函数做了类似的事情,它 APPENDSbad.mm 你可能想分配。但是,您可以为它分配一个可选的 UITextField.Text 属性。使用 ?? 运算符,您可以在为其提供默认值的同时为其提供 unwrap 选项。空字符串通常是一个很好的默认值。因此,为此我建议将 @IBAction func move 内的行更改为以下内容:

bad.mm = labez.text ?? ""

或者只是实际删除这一行,因为您在之前的函数中同时分配了 bad.mm 和 labez.text。但这就是您在文本周围获得 optional() 的原因。

这应该会给你想要的效果。您的“元组”未按正确顺序传递的原因是您没有将排序的元组从一个 VC 抓取到下一个 VC,而是将格式不正确的字符串从一个 VC 抓取到另一个 VC。考虑直接传递排序后的元组,然后在两个 ViewControllers 中分别格式化字符串以减少混淆。

关于ios - 通过时结构不保持元组顺序(swift3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46123985/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap