とあるClaude3.5との会話(SwiftUIのコード修正)

もうね、プログラム開発にClaude3.5は欠かせませんよ。ていうかワイはアホだったのかww

ワイ:allClearの状態で演算子を入れても無視してください

Claude3.5:
承知しました。`allClear`の状態で演算子を入力しても無視するように`ContentViewModel.swift`を修正します。具体的には、`setOperator`メソッドを更新して、新しい計算が始まっていない状態(つまり、`previousInput`が`nil`で、`currentInput`が"0"の状態)では演算子の入力を無視するようにします。

`ContentViewModel.swift`ファイルの`setOperator`メソッドを以下のように更新してください:

func setOperator(_ op: String) {
    // allClearの状態(previousInputがnilで、currentInputが"0")では演算子を無視
    if previousInput == nil && currentInput == "0" {
        return
    }

    if isEqualJustPressed {
        previousInput = lastResult
        lastResult = nil
        addCell(operatorSymbol: "", text: calculator.formatResult(), color: .blue)
    } else if isNewInput && currentOperator != nil {
        // 演算子が連続して押された場合、演算子を入れ替える
        currentOperator = op
        displayOperator = op
        // 最後のセルの演算子を更新
        if let lastIndex = cellContents.lastIndex(where: { !$0.operatorSymbol.isEmpty }) {
            cellContents[lastIndex].operatorSymbol = op
        }
        return
    } else if let previous = previousInput, let current = Decimal(string: currentInput), !currentInput.isEmpty && currentInput != "0" {
        performOperation(previous, current, currentOperator ?? "")
        addCell(operatorSymbol: currentOperator ?? "", text: currentInput, color: .gray)
        previousInput = calculator.result
        displayInput = calculator.formatResult()
    } else if previousInput == nil {
        previousInput = Decimal(string: currentInput)
        addCell(operatorSymbol: "", text: currentInput, color: .gray)
    }
    currentOperator = op
    displayOperator = op
    isNewInput = true
    isEqualJustPressed = false
}

この変更により、以下の動作が実現されます:

  1. メソッドの最初で、`previousInput`が`nil`で、かつ`currentInput`が"0"の場合(つまり、`allClear`の状態)、メソッドを即座に終了します。これにより、この状態での演算子入力が無視されます。

  2. それ以外の場合は、既存の論理に従って演算子の設定や計算を行います。

この修正により、`allClear`の状態(初期状態や`allClear`メソッドが呼ばれた直後の状態)で演算子を入力しても、その入力が無視されるようになります。ユーザーは最初に数字を入力してから演算子を入力する必要があります。

この記事が気に入ったらサポートをしてみませんか?