【问题标题】:Extension to Test if NSString is Numeric in Swift测试 NSString 在 Swift 中是否为数字的扩展
【发布时间】:2019-03-30 19:12:22
【问题描述】:

可以使用以下方法快速测试字符串是否为数字:

extension String  {
    var isNumber: Bool {
        return !isEmpty && rangeOfCharacter(from: CharacterSet.decimalDigits.inverted) == nil
    }
}

是否有类似的方法来检查 NSString 是否为数字?我已经玩过上述方法,但无法编译任何东西。

【问题讨论】:

  • (nsString as String).isNumber 呢?
  • 这应该可以从 Swift 调用

标签: ios swift integer nsstring


【解决方案1】:

您需要检查长度是否大于 0 以及范围位置是否等于 NSNotFound:

extension NSString  {
    var isNumber: Bool {
        return length > 0 && rangeOfCharacter(from: CharacterSet.decimalDigits.inverted).location == NSNotFound
    }
}

("1" as NSString).isNumber  // true

("a" as NSString).isNumber // false

【讨论】:

  • 你可以从目标 c 调用它为 mystring.isNumber
【解决方案2】:

你可以在扩展中创建一个函数

extension NSString  {
func isNumber() -> Bool {
    let str: String = self as String
    return Int(str) != nil || Double(str) != nil
    }
}
let x: NSString = "32"
x.isNumber() // true

【讨论】:

  • OP 询问NSString 是否有类似的方法来检查 NSString 是否为数字?
【解决方案3】:

根据 Apple 的文档:

字符串是一系列字符,例如“Swift”,它们形成一个集合。 Swift 中的字符串是 Unicode 正确且不区分语言环境的,并且被设计为高效的。 String 类型与 Objective-C 类 NSString 桥接,并提供与使用字符串的 C 函数的互操作性。

所以你可以输入 cast 并使用相同的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多