Blame view

HDFwear/Tools/String+Extension.swift 3.29 KB
f2cf74c7   yangbin   1.0.20(4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
  //
  //  s.swift
  //  Twear
  //
  //  Created by yangbin on 2021/12/6.
  //
  import UIKit
  //import CommonCrypto
  
  extension StringProtocol {
      var hexaData: Data { .init(hexa) }
      var hexaBytes: [UInt8] { .init(hexa) }
      private var hexa: UnfoldSequence<UInt8, Index> {
          sequence(state: startIndex) { start in
              guard start < self.endIndex else { return nil }
              let end = self.index(start, offsetBy: 2, limitedBy: self.endIndex) ?? self.endIndex
              defer { start = end }
              return UInt8(self[start..<end], radix: 16)
          }
      }
  }
  
  extension String {
      
      var length: Int {
          return self.count
      }
      
  //    func contains(find: String) -> Bool{
  //        return self.range(of: find) != nil
  //    }
  //
  //    func containsIgnoringCase(find: String) -> Bool{
  //        return self.range(of: find, options: .caseInsensitive) != nil
  //    }
  //
      subscript (i: Int) -> String{
          return self[i ..< i + 1]
      }
      
      func substring(fromIndex: Int) -> String {
          return self[min(fromIndex, length) ..< length]
      }
      
      func substring(toIndex: Int) -> String {
          return self[0 ..< max(0, toIndex)]
      }
      
      subscript (r: Range<Int>) -> String {
          let range = Range(uncheckedBounds: (lower: max(0, min(length, r.lowerBound)), upper: min(length, max(0, r.upperBound))))
          let start = index(startIndex, offsetBy: range.lowerBound)
          let end = index(start, offsetBy: range.upperBound - range.lowerBound)
          return String(self[start ..< end])
      }
      
      func toRange(_ range: NSRange) -> Range<String.Index>? {
          guard let from16 = utf16.index(utf16.startIndex, offsetBy: range.location, limitedBy: utf16.endIndex) else { return nil }
          guard let to16 = utf16.index(from16, offsetBy: range.length, limitedBy: utf16.endIndex) else { return nil }
          guard let from = String.Index(from16, within: self) else { return nil }
          guard let to = String.Index(to16, within: self) else { return nil }
          return from ..< to
      }
      
      
      func checkVersion(_ newVersion: String) -> Bool {
          return self.compare(newVersion, options: .numeric) == .orderedAscending
      }
      
ba0a04ea   jason   feat:string half ...
69
70
71
72
73
74
75
      func toFullWidth() -> String {
          let mutableString = NSMutableString(string: self)
          
          CFStringTransform(mutableString, nil, kCFStringTransformFullwidthHalfwidth, true)
          
          return mutableString as String
      }
f2cf74c7   yangbin   1.0.20(4)
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
  }
  
  
  extension Float {
      /// 准确的小数尾截取 - 没有进位
      func decimalString() -> String {
          return String(format: "%.2f", Float(Int(self*100))/100.0)
  //        return "\(Float(Int(distance*100))/100.0))"
  //        let tempCount: Self = pow(10, base)
  //        let temp = self*tempCount
  //
  //        let target = Self(Int(temp))
  //        let stepone = target/tempCount
  //        if stepone.truncatingRemainder(dividingBy: 1) == 0 {
  //            return String(format: "%.0f", stepone)
  //        }else{
  //            return "\(stepone)"
  //        }
      }
      func mileString() -> String {
          return String(format: "%.2f", Float(Int(self*100*0.6213))/100.0)
      }
      func footString() -> String {
          return String(format: "%.2f", Float(Int(self*100*3.281))/100.0)
      }
      func inchString() -> String {
          return String(format: "%.2f", Float(Int(self*100*39.37))/100.0)
      }
  }