如何创建增量数字字符串?

时间:2018-09-19 16:08:03

标签: swift

就像我的问题标题一样。
如果我得到字符串00001,我想+1并返回00002。
如果我得到字符串00009,我想+1并返回00010。
....
如果我得到字符串89999,我想+1并返回90000。
如何使此功能看起来更好和更容易?谢谢。

func createFloatNumberString(str: String){

    var idArray: [String] = [] //[0,0,0,0,1] [0,0,0,1,0] [8,9,9,9,9]

    str.map { (char) in
        idArray.append(char.description)
    }

    idArray[4] = String(Int(idArray[4])!+1)

    if idArray[4] == "10" {
        idArray[4] = "0"
        idArray[3] = String(Int(idArray[3])!+1)

        if idArray[3] == "10" {
            idArray[3] = "0"
            idArray[2] = String(Int(idArray[2])!+1)

            if idArray[2] == "10" {
                idArray[2] = "0"
                idArray[1] = String(Int(idArray[1])!+1)

                if idArray[1] == "10" {
                    idArray[1] = "0"
                    idArray[0] = String(Int(idArray[0])!+1)
                }
            }
        }
    }
}

2 个答案:

答案 0 :(得分:1)

您需要将String转换为Int,将其递增,然后使用格式化的String作为返回值。

func incrementFormattedNumericString(numericString:String,increment by:Int=1) -> String? {
    guard let numericValue = Int(numericString) else { return nil }
    return String(format: "%.5ld", numericValue+by)
}

如果您确定传递给函数的numericString始终是有效数字,则可以强制将转换解包为Int并返回非可选值。

答案 1 :(得分:0)

非常简单的解决方案:

作为计数器使用Int和此扩展名

extension Int {
    var fiveDigitStringRepresentation : String {
        return String(format: "%05ld", self)
    }
}

123.fiveDigitStringRepresentation // "00123"

或者-更复杂-使用结构

struct Count {
    var counter = 0

    mutating func increment() { counter += 1 }

    var fiveDigitStringRepresentation : String {
        return String(format: "%05ld", counter)
    }
}


var count = Count()
count.increment()
count.increment()
print(count.fiveDigitStringRepresentation) // "00002"