String转换为Int
在Swift中,可以通过以下方式从一个String类型的"38.9"获取一个Int类型的值:
- 使用Int初始化器,传入String作为参数,会自动转换为整数:
let str = "38.9"
let intValue = Int(str)! // 38
需要注意强制解包Int初始化可能失败,如果字符串不是有效的整数。
- 使用数值类型的扩展,通过更安全的方式转换:
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。
- 可以使用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