菜鸟教程小白 发表于 2022-12-11 18:38:43

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


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

<p>查看 Controller1 </p>

<pre><code> import UIKit

var number = ()
var yourArray = ()


class ViewController: UIViewController {

    @IBOutlet var labez: UILabel!
    @IBOutlet var textA: UITextField!
    @IBOutlet var textB: UITextField!

    @IBAction func move(_ sender: Any) {



      bad.mm =


    }
    @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 &lt; next.0 {
                return true
            } else if this.0 == next.0 {
                return this.1 &lt; next.1
            } else {
                return false
            }
      })
      print(sorted)

      labez.text = sorted.map { &#34; \($0)&#34; }.joined(separator:&#34;\n&#34;)
   bad.mm = [String(describing:sorted.map { &#34; \($0)&#34; }.joined(separator:&#34;\n&#34;)





            )]
    }
    struct bad {

static var mm = ()

      }
    }
</code></pre>

<p> <a href="/image/nChfh.png" rel="noreferrer noopener nofollow"><img src="/image/nChfh.png" alt="enter image description here"/></a> </p>

<p> ViewController2 </p>

<pre><code>    import UIKit

class ViewController2: UIViewController {

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

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





}
</code></pre>

<p> <a href="/image/uYsFI.png" rel="noreferrer noopener nofollow"><img src="/image/uYsFI.png" alt="enter image description here"/></a> </p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>除了我对您如何设计数据和命名约定的批评之外。我相信你想要的是<em>ASSIGN</em>你的<code>bad.mm</code>而不是<em>APPEND</em>。 </p>

<p>发生的情况是,当您第一次向 <code>bad.mm</code> 输入值时,它是 <code>(a, 2)</code>。然后,当它被 <em>附加</em> 时,您将排序数组 <code>(a, 1), (a, 2)</code> 添加到现有字符串中,使其成为 <code>(a, 2) , (a, 1), (a, 2)</code> 如果您分配它,它现在将只是新的排序数组 <code>(a, 1), (a, 2)</code>。 </p>

<p>分配更改</p>

<pre><code>bad.mm.append(String(describing:sorted.map { &#34; \($0)&#34; }.joined(separator:&#34;\n&#34;))
</code></pre>

<p>在<code>ViewController</code>类中</p>

<pre><code>bad.mm = String(describing:sorted.map { &#34; \($0)&#34; }.joined(separator:&#34;\n&#34;)
</code></pre>

<p>在 <code>ViewController</code> 你的 <code>move</code> 函数做了类似的事情,它 <code>APPENDS</code> 到 <code>bad.mm</code> 你可能想分配。但是,您可以为它分配一个可选的 <code>UITextField.Text</code> 属性。使用 <code>??</code> 运算符,您可以在为其提供默认值的同时为其提供 unwrap 选项。空字符串通常是一个很好的默认值。因此,为此我建议将 <code>@IBAction func move</code> 内的行更改为以下内容:</p>

<pre><code>bad.mm = labez.text ?? &#34;&#34;
</code></pre>

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

<p>这应该会给你想要的效果。您的“元组”未按正确顺序传递的原因是您没有将排序的元组从一个 VC 抓取到下一个 VC,而是将格式不正确的字符串从一个 VC 抓取到另一个 VC。考虑直接传递排序后的元组,然后在两个 <code>ViewControllers</code> 中分别格式化字符串以减少混淆。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 通过时结构不保持元组顺序(swift3),我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/46123985/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/46123985/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 通过时结构不保持元组顺序(swift3)