// // 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 { 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.. 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) -> 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? { 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 } }