我有下面的字符串扩展名,但只有 Int 才返回true,我想将其返回true,对于All, Int 和 Double < / strong>仅限值。
extension String {
var isnumberordouble : Bool {
get{
return self.rangeOfCharacter(from: CharacterSet.decimalDigits.inverted) == nil
}
}
}
我该如何解决?任何的想法 ? TY。
答案 0 :(得分:6)
正如@MartinR所说,检查字符串是否可以转换为Int
或Double
:
extension String {
var isnumberordouble: Bool { return Int(self) != nil || Double(self) != nil }
}
print("1".isnumberordouble) // true
print("1.2.3".isnumberordouble) // false
print("1.2".isnumberordouble) // true
@MartinR在评论中提出了一个很好的观点。转换为Int
的任何值也会转换为Double
,因此只需检查转换为Double
即可:
extension String {
var isnumberordouble: Bool { return Double(self) != nil }
}
处理前导和尾随空格
上述解决方案有效,但如果您的String
具有前导空格或尾随空格,则无法原谅。要处理它,请使用trimmingCharacters(in:)
String
方法删除空格(需要基础):
import Foundation
extension String {
var isnumberordouble: Bool { return Double(self.trimmingCharacters(in: .whitespaces)) != nil }
}
print(" 12 ".isnumberordouble) // true