Swift String转换为Int,结果由claude.ai提供

165 阅读1分钟

String转换为Int

在Swift中,可以通过以下方式从一个String类型的"38.9"获取一个Int类型的值:

  1. 使用Int初始化器,传入String作为参数,会自动转换为整数:
let str = "38.9"
let intValue = Int(str)! // 38

需要注意强制解包Int初始化可能失败,如果字符串不是有效的整数。

  1. 使用数值类型的扩展,通过更安全的方式转换:
extension Numeric {
  init?(_ text: String) {
    let formatter = NumberFormatter()
    formatter.numberStyle = .decimal
    return formatter.number(from: text).flatMap(Self.init) 
  }
}

let str = "38.9"
let intValue = Int(str) // 38

这会通过NumberFormatter先把字符串解析成NSNumber,再转换到Int类型。如果不能成功转换,会返回nil。

  1. 可以使用Foundation框架中的扫描转换:
let str = "38.9"
var intValue: Int = 0
Scanner(string: str).scanInt(&intValue) // 38

这会扫描字符串并存储整数部分到传入的int变量中。

所以在Swift中有很多种方法可以把String转换成Int,需要根据实际情况选择合适的方式。

判断String是否可以转成整数

使用正则表达式

"^-?\d+(\.0+)?$"

func isInteger(_ string: String) -> Bool {
  let intRegex = "^-?\\d+(\\.0+)?$"
  let bound = string.range(of: intRegex, options: .regularExpression)
    if let bound {
        print(string[bound])
        return true
    } else {
        print( string + "##")
        return false
    }
}

print(isInteger("38.9c")) // false
print(isInteger("38.9")) // false
print(isInteger("38")) // true
print(isInteger("38.0")) // true
print(isInteger("38.00")) // true
print(isInteger("0.09")) // false