我有下面的字符串扩展名,但只有Int返回true ,我想返回true,仅适用于All,Int和Double值.
extension String {
var isnumberordouble : Bool {
get{
return self.rangeOfCharacter(from: CharacterSet.decimalDigits.inverted) == nil
}
}
}
Run Code Online (Sandbox Code Playgroud)
我该如何解决?任何的想法 ?TY.
正如@MartinR所说,检查字符串是否可以转换为a Int或a 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
Run Code Online (Sandbox Code Playgroud)
@MartinR在评论中提出了一个很好的观点.任何Int转换为a的值也会转换为a Double,因此只需检查转换Double就足够了:
extension String {
var isnumberordouble: Bool { return Double(self) != nil }
}
Run Code Online (Sandbox Code Playgroud)
处理前导和尾随空格
上面的解决方案有效,但如果你String有前导空格或尾随空格,那就不是很宽容了.要处理它,请使用删除空格的trimmingCharacters(in:)方法String(需要Foundation):
import Foundation
extension String {
var isnumberordouble: Bool { return Double(self.trimmingCharacters(in: .whitespaces)) != nil }
}
print(" 12 ".isnumberordouble) // true
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1131 次 |
| 最近记录: |