Ios 将字符串分秒转换为Int

Ios 将字符串分秒转换为Int,ios,swift,string,int,Ios,Swift,String,Int,我有一个带有分和秒的字符串,格式为“分:秒”。例如,“5:36”。我想把它转换成Int值。例如,“5:36”字符串应为336 Int值。如何做到这一点?我在操场上试过你的例子,下面是代码: import Foundation let time1String = "0:00" let time2String = "5:36" let timeformatter = DateFormatter() timeformatter.dateFormat = "m:ss" let tim

我有一个带有分和秒的字符串,格式为“分:秒”。例如,“5:36”。我想把它转换成Int值。例如,“5:36”字符串应为336 Int值。如何做到这一点?

我在操场上试过你的例子,下面是代码:

import Foundation

let time1String = "0:00"
let time2String = "5:36"

let timeformatter        = DateFormatter()
timeformatter.dateFormat = "m:ss"

let time1 = timeformatter.date(from: time1String)
let time2 = timeformatter.date(from: time2String)

if let time1 = time1 {
    print(time2?.timeIntervalSince(time1)) // prints: Optional(336.0)
}

下面是一个简单的扩展,您可以使用它来验证输入字符串的格式:

import Foundation

extension String {

    func toSeconds() -> Int? {

        let elements = components(separatedBy: ":")

        guard elements.count == 2 else {
            print("Provided string doesn't have two sides separated by a ':'")
            return nil
        }

        guard let minutes = Int(elements[0]),
        let seconds = Int(elements[1]) else {
           print("Either the minute value or the seconds value cannot be converted to an Int")
            return nil
        }

        return (minutes*60) + seconds

    }

}
用法:

let testString1 = "5:36"
let testString2 = "35:36"

print(testString1.toSeconds()) // prints: "Optional(336)"
print(testString2.toSeconds()) // prints: "Optional(2136)"

Int(m)*60+Int(s)
下次,请先尝试自己解决问题并发布您的尝试。这是错误的方法,您应该首先将其转换为日期格式no@PrashantTukadiya,这是正确的方法。OP没有说字符串是时钟时间值,只是说它是“分:秒”。它可能是一个带有“2000:30”的计时器。在这种情况下,转换为DateFormat将不起作用。这不适用于
let time2String=“99:36”
,因为它假定字符串是时钟时间。但也不一定是这样。如果它是一个计时器,在计算秒和分呢?如果您只需拆分字符串并将其转换为整数,则两次将字符串转换为日期也是低效且不必要的。这也无法处理原始请求中的字符串
“5:36”
。为此,必须对格式进行编辑,使其适用于“5:36”。“99:36”对我来说毫无意义。“59:59”之后不是应该是“1:00:00”吗?当然,取决于要求
let testString1 = "5:36"
let testString2 = "35:36"

print(testString1.toSeconds()) // prints: "Optional(336)"
print(testString2.toSeconds()) // prints: "Optional(2136)"