繁体   English   中英

如何使用 Xcode 11 和 swift 从一组用户输入的 Ints 中找到 Max

[英]How do I find the Max from a group of user inputed Ints using Xcode 11 and swift

这是我到目前为止所拥有的:

import UIKit

class ViewController: UIViewController {
    @IBOutlet weak var game1: UITextField!
    @IBOutlet weak var game2: UITextField!
    @IBOutlet weak var game3: UITextField!

    @IBOutlet weak var series: UILabel!
    @IBOutlet weak var average: UILabel!
    @IBOutlet weak var high: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.

    }

    @IBAction func calculate(_ sender: Any) {

        let game1Results = Int(game1.text!)
        let game2Results = Int(game2.text!)
        let game3Results = Int(game3.text!)
        let gameResultsArray = [game1Results, game2Results, game3Results]

        high.text = "\(gameResultsArray.max())"
    }
}

我一直在尝试使用 .max function 但我收到错误消息,指出我需要参考“可比”。 我对 swift 很陌生,任何帮助将不胜感激。

发生这种情况是因为您尝试比较可选 Int (Int?) 的值

首先,你应该知道并不是每个 String 都可以转换为 Int

例如 '42' 将被正确转换,但 'ie42zx' 不能转换为和 Int - 这就是 Int(String) function 返回可选 Int (Int?)

“可选”属性表示“我可以有一个值,但我也可以为零”。 这就是为什么你应该在你的代码中解开选项

首先,我建议避免在这里强制展开。

let game1Results = Int(game1.text!)

可以这样做:

guard
        let text1 = game1.text,
        let text2 = game2.text,
        let text3 = game3.text
else { return }

你应该这样做,因为不是每个文本字段都包含文本,所以 textField.text 属性返回一个可选的字符串?

然后您可以将您的 String 结果转换为 Int 并在比较之前解开这些结果:

guard
        let game1Results = Int(text1),
        let game2Results = Int(text2),
        let game3Results = Int(text3)
else { return }

我建议阅读更多有关 swift 和展开中的选项的信息(请参阅 选项段落)

我相信您的问题是带有字符串的 Int 构造函数返回一个可选的 integer 值。 您正在尝试获取一堆选项中的最大值,所以它无法弄清楚。

在调用max()过滤掉 nil 值之前,您可以在数组上使用compactMap function。

gameResultsArray.compactMap{ $0 }.max()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM