Toggle the sign of a String Number

I have a string that contains a number. I want to add a minus sign if it’s not there or remove it if it is there. I have a working function, but I’m wondering if there’s a better way.

  private func toggleAmountSign()
  {
    if amount.first == "-"
    { amount.removeFirst() }
    else
    { amount.insert("-", at: amount.startIndex) }
  }

This forum always teaches me something, so I figure maybe I can get another lesson.

Seems to be alright, but I would also look for 0, not just for a “-” before the number.
In your code, you would get a -0, which is strange.

You may want to check if your number is negativ or positiv by using signum(), instead of looking for a “-” (user may also write “—” or space -)

You don’t even need to use signum at all. Just multiply your number by -1 and that will flip whatever the sign is to the opposite.

extension String {
    var toggledSign: String {
        return String((Int(self) ?? 0) * -1)
    }
}

let test = [
    "1",
    "3",
    "-13",
    "0",
    "27",
    "-27",
    "george"
]

print(test.map(\.toggledSign))
//["-1", "-3", "13", "0", "-27", "27", "0"]

Note that for simplicity, I just had anything that can’t be converted to an Int become 0, but you could handle that situation a number of different ways. For instance:

extension String {
    var toggledSign: String {
        guard let num = Int(self) else {
            return self
        }
        return String(num * -1)
    }
}

And you could include other kinds of bulletproofing, like trimming the string before converting it just in case there are extraneous spaces, etc.

Thanks for the suggestions. I do check for validity with

if Double(amount) == nil

Good ideas. Once again, I learned something from this forum.