# RFTools **Repository Path**: roffa/rftools ## Basic Information - **Project Name**: RFTools - **Description**: swift版本常用工具 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-07-13 - **Last Updated**: 2022-03-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # LSTools [![CI Status](https://img.shields.io/travis/zrf/LSTools.svg?style=flat)](https://travis-ci.org/zrf/LSTools) [![Version](https://img.shields.io/cocoapods/v/LSTools.svg?style=flat)](https://cocoapods.org/pods/LSTools) [![License](https://img.shields.io/cocoapods/l/LSTools.svg?style=flat)](https://cocoapods.org/pods/LSTools) [![Platform](https://img.shields.io/cocoapods/p/LSTools.svg?style=flat)](https://cocoapods.org/pods/LSTools) > LSTools组件不依托具体业务,定义相关Extension及其它与View无关的功能方法。区别于LSBase、LSUIKit ## Example To run the example project, clone the repo, and run `pod install` from the Example directory first. ``` //MARK: LSConstant Demo print("App信息" + appName() + appVersion() + "." + appBuildNum()) print("屏幕宽\(lsScreenWidth)高\(lsScreenHeight)顶部安全区域高\(lsSafeTop)底部安全区域高\(lsSafeBottom)") let str = "0123456789abcdf" let data: Data! = str.data(using: .utf8) print(123) //正常打印 lsPrint(123) //定制化打印,正式环境不打印,打印内容自动存储在本地,方便根据log追踪问题 lsPrint(data.hexString) //Data数据以16进制输出 303132333435363738396162636466 //MARK: LSPathManager Demo @RFPathProtected var path: String = "w3w/1/2/3" //本地自动生成完整路径 lsPrint(path) ///Users/a123456/Library/Developer/CoreSimulator/Devices/85C4F321-37BA-4464-B64F-819A3631A8B4/data/Containers/Data/Application/39C04FA7-0641-4BA9-BE18-59243C94A392/Documents/Local/w3w/1/2/3 @RFPathProtected var path1: String = "w4/1" @RFPathProtected var path2: String = "w1/1/2/3" @RFPathProtected var path3: String = "w4/1/2/3" RFPathManager.create(path3, data: "123qw写点东西".data(using: .utf8)!) //根据文件路径,写入数据 RFPathManager.copy("w4", to:"w5") //w4文件夹copy到w5 lsPrint("读取文件内容Data:"+RFPathManager.data(path3)!.string) RFPathManager.insert(path3, data: "\n\n换\n能不能顺利的插入到后面进入呀".data(using: .utf8)!) //文件末尾插入 读取文件内容Data:123qw写点东西 lsPrint("读取文件片段:" + RFPathManager.read(path3, from: 1, length: 10).string)//读取文件片段:23qw写点 lsPrint("获取当前子路径列表:" + RFPathManager.getCurPaths("w2w").description) //获取当前子路径列表["1"] lsPrint("获取所有子路径列表:" + RFPathManager.getSubPaths(RFPathManager.prefixDocPath).description)//获取所有子路径列表["w3w", "w3w/1", "w3w/1/2", "w4", "w4/1", "w4/1/2", "w4w", "w4w/1", "w4w/1/2", "w1", "w1/1", "w1/1/2", "w2w", "w2w/1", "w2w/1/2"] lsPrint("获取文件夹下文件列表:" + RFPathManager.getSubFiles(RFPathManager.prefixDocPath).description)//获取文件夹下文件列表:["w4/1/2/3", "w5/1/2/3", "Log/log.txt"] print(RFPathManager.size("Log/log.txt")) //15187 lsPrint(self.classString()) //获取类名. 打印出:LSTools_Example.ViewController //MARK: 浮点数 print("浮点数整型输出1.9994=\(1.9994.i), 浮点数为整数转换3.00=\(3.00.cleanZero)" ) //浮点数整型输出1.9994=1, 浮点数为整数转换3.0017=3.0017 //MARK: 国际化 String.language = .cn // 此行在本地改变语言后赋值,默认显示中文 lsPrint("扫描大师".local) //本地国际化 //MARK: UIImage //更多操作请查看Image+Extension类 let img = UIImage(named: "Image") print("图片大小\(img!.kb)kb") print("图片转jpegData=\(img!.compressedData(quality: 0.5)!.description)") print("图片转png Base64输出:\(img!.pngBase64String()!)") var newImg = img!.imageWithTintColor(.main) //图片颜色渲染为主色显示 newImg = newImg.rotated(on: 90) //旋转90° newImg.compress(toByte: 100*1024) //压缩图片到100kb //MARK: String let testStr = "13854241489" print("是否是手机\(testStr.isPhone),是否是数字\(testStr.isNumeric),是否是邮箱\(testStr.isEmail)") //是否是手机true,是否是数字true,是否是邮箱false lsPrint("md5(\(str))=" + str.md5) //MD5输出 lsPrint("sha256(\(str))=" + str.sha256) //sha256输出 sha256(0123456789abcdf)=6ef6e6a482b064c519c94d2157ef6b3c24ade3ed79b5155749f8fc13f0940d97 lsPrint(str.base64 + " " + str.decodeBase64) //base64输出 MDEyMzQ1Njc4OWFiY2Rm 0123456789abcdf try? testStr.dict() //json str转字典 print("随机字符串:" + String(randomOfLength: 8)) // testStr.copyToPasteboard() //内容复制到剪切板 //MARK: Date let date = Date() print("\(date.year)第\(date.weekOfYear)周, iso:\(date.iso8601String)")//2021第27周, iso:2021-06-30T05:56:49.011Z //MARK: LSLock锁 支持多线程串行执行、线程安全 var marray = [Int]() for i in 0 ... 10 { DispatchQueue.global().async { LSLock.unfairLock { print("打印内容:\(i)") marray.append(i) } } DispatchQueue.global().async { LSLock.unfairLock { print("打印内容数组\(marray.count)最后一个:\(marray.last)") } } } ``` ![多线程读写打印结果](https://upload-images.jianshu.io/upload_images/9129568-81ca4b2583dca146.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ## 更新记录 #### 0.2.0(2021-12-16) 增加Array扩展,支持数组转jsonString 增加String扩展,支持属性字操作 增加Button扩展,支持直接读取视频文件缩略图 增加HandyJson封装类,解析网络数据 #### 0.1.9(2021-07-12) 更改国际化方法,支持动态修改Bundle #### 0.1.8(2021-07-12) 更改国际化方法,支持动态修改tableName ### 0.1.7(2021-07-07) 增加`LSLock`锁封装,快速实现线程安全 ### 0.1.6(2021-07-05) 修改Image扩展,调整`func compress(toByte : Int = 600 * 1024, limitSize: Int = 800 * 1024)`,增加当图片长或宽大于2048px执行resize操作 重命名相关扩展类名,使上下一致 ## Requirements ## Installation LSTools is available through [CocoaPods](https://cocoapods.org). To install it, simply add the following line to your Podfile: ```ruby pod 'LSTools' ``` ## Author zrf, zhourongfeng@021.com ## License LSTools is available under the MIT license. See the LICENSE file for more info.