// // String+.swift // yinmeng-ios // // Created by yinmeng on 2024/2/23. // import Foundation import CommonCrypto extension String { func encrypt() -> String? { let str = MAIDESEncryptTool.encryptUseDES(self, key: DesKey) return str } func decrypt() -> String? { let str = MAIDESEncryptTool.decryptUseDES(self, key: DesKey) return str } func decrypt(key:String) -> String? { let str = MAIDESEncryptTool.decryptUseDES(self, key: key) return str } } extension String { /// 截取字符串 /// - Parameters: /// - begin: 开始截取的索引 /// - count: 需要截取的个数 /// - Returns: 字符串 func substring(start: Int, _ count: Int) -> String { let begin = index(startIndex, offsetBy: max(0, start)) let end = index(startIndex, offsetBy: min(count, start + count)) return String(self[begin.. CGSize { let attritube = NSMutableAttributedString(string: self) let range = NSRange(location: 0, length: attritube.length) attritube.addAttributes([NSAttributedString.Key.font: font], range: range) if lineSpacing != nil { let paragraphStyle = NSMutableParagraphStyle() paragraphStyle.lineSpacing = lineSpacing ?? 0 attritube.addAttribute(NSAttributedString.Key.paragraphStyle, value: paragraphStyle, range: range) } let rect = attritube.boundingRect(with: constrainedSize, options: [.usesLineFragmentOrigin, .usesFontLeading], context: nil) var size = rect.size if let currentLineSpacing = lineSpacing { let spacing = size.height - font.lineHeight if spacing <= currentLineSpacing && spacing > 0 { size = CGSize(width: size.width, height: font.lineHeight) } } return size } }