簡體   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