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