string - 检查字符串是否是 Swift 中的有效 double 值

标签 string swift double

在 Swift 中,如何检查字符串是否为有效的 double 值?我一直在使用 this question 中的以下扩展名(但作为 float )但如果该值无法转换,它只返回“0”:

extension String {
    var doubleValue:Double? {
        return (self as NSString).doubleValue
    }
}

理想情况下,我希望它返回 nil,这样它就可以在 if-let 中被捕获,如下所示:

if let i = str.doubleValue {
    object.price = i
} else {
    // Tell user the value is invalid
}

最佳答案

编辑/更新:Xcode 11 或更高版本 • Swift 5.1 或更高版本

您可以使用 Double初始值设定项 init?<S>(_ text: S) where S : StringProtocolStringProtocol 上创建实例属性并用它来检查是否 StringSubstring是有效的 Double :

extension StringProtocol {
    var double: Double? { Double(self) }
    var float: Float? { Float(self) }
    var integer: Int? { Int(self) }
}

测试

let str = "2.9"
if let value = str.double  {
    print(value)           // "2.9\n"
} else {
    print("invalid input")
}

str.prefix(1).integer  // 2
str.suffix(1).integer  // 9

关于string - 检查字符串是否是 Swift 中的有效 double 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30315723/

相关文章:

c# - 查找字符串中具有特定字母的所有单词

c# - .NET 不安全的字符串操作

swift - 如何禁用 SwiftUI 中 subview 上特定状态更改的动画

ios - 复选框在 Swift 中选中的 Action ?

c# - float 乘法返回意外结果

php - 从 Drupal 形式的 check_plain() 中排除字符

ios - swift 不能用 String 调用 isKindOfClass

iOS 11 更喜欢以 uibutton 作为标题的 LargeTitles

c - 如何在 32 位和 64 位模式下获得相同的 double 运算行为?

double - C# 魔法双值解析