Blame view

Twear/Tools/String+Extension.swift 2.83 KB
75d24c15   yangbin   123
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
  //
  //  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
      }
      
      
      
      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
      }
      
  }
  
  
be19e595   yangbin   9
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
  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)
      }
  }