Swift 开发的工具类,主要是提供正则表达式及其它,Github会长期维护

直接访问 GitHub 看代码

YYGRegular

我是: 语歌复制代码

It is a regular expression used on iOS, which implement by Swift

这是一个基于swift快捷开发的扩展类,目前的涵盖内容包括详细打印,正则表达式,会经常维护

介于是增加更新,直接翻到后面。或者直接看 GitHub

直接把 Category 文件夹拖转到工程里面就行

1.打印的方法,及简单介绍

符号类型描述
#fileString包含这个符号的文件路径
#lineInt符号出现的行号
#columnInt符号出现的类
#functionString包含这个符号的方法名字
public func printLogDebug<T>(_ message: T,file: String = #file,method: String = #function,line: Int = #line)
{#if DEBUGprint("------------------\(line) lineBegin-------------------------\n类名称: \((file as NSString).lastPathComponent)\n方法名: \(method)\n信息: \(message)\n------------------\(line) line  End-------------------------")#endif
}复制代码
调用
直接调用打印:
printLogDebug("内容")复制代码

在 Release 版本中会自动关闭掉向控制台的输出。

打印效果如下:

------------------(*行号*) lineBegin-------------------------
类名称: ***.swift
方法名: ***
信息: ***打印的内容***
------------------(*行号*) line  End-------------------------复制代码

关于public的使用看下表

名称控制级(1-5,5最高)解释
private1只能在当前作用域中使用
fileprivate2只能在当前文件夹中使用
internal3默认的target中的其他代码访问
public4为其他开发者开发库使用
open5为其他开发者开发库使用被open标记 的才能在其他库中重写

2.正则表达式用法

示例:
>

因为Swift支持重载操作符, 这个用 =~ 来判断是否符合,关于=~ 功能及符号的定义,自己去代码里面找吧!!!

>

        if "13146492969@sina.cn" =~ mail {printLogDebug("^_^")} else {printLogDebug("~~~~(>_<)~~~~")}/// 自定义的匹配格式判断是否是手机号let isIphoneNum: String = "1\\d{10}"if "13146492969" =~ isIphoneNum {printLogDebug("^_^")} else {printLogDebug("~~~~(>_<)~~~~")}复制代码

定义了操作符的优先级:

precedencegroup

定义了相同操作符出现的结合顺序

associativity

表示前后都是输入

infix

相关正则匹配的写法,有想知道更详细的写法 请移步: 正则表达式学习

以下给出基本的写法。

不足之处,烦请指出

1./// 邮箱匹配
let mail: String = "^([a-z0-9_\\.-]+)@([\\da-z\\.-]+)\\.([a-z\\.]{2,6})$"2./// 匹配用户名 字面或者数字组合 4到16位
let Username: String = "^[a-z0-9_-]{4,16}$"3./// 匹配密码 字面加下划线,6到18位
let Password: String = "^[a-z0-9_-]{6,18}$"4./// 匹配16进制
let HexValue: String = "^#?([a-f0-9]{6}|[a-f0-9]{3})$"5.///内容带分割符号 “Anne-Blair”
let Slug: String = "^[a-z0-9-]+$"6./// 匹配URL
let isURL: String = "^(https?:\\/\\/)?([\\da-z\\.-]+)\\.([a-z\\.]{2,6})([\\/\\w \\.-]*)*\\/?$"7./// 匹配IP地址
let IPAddress: String = "^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$"8./// 是HTML <center>内容<\center>  符合
let HTMLTag: String = "^<([a-z]+)([^<]+)*(?:>(.*)<\\/\\1>|\\s+\\/>)$"9./// 日期(年-月-日)
let isDate1: String = "(\\d{4}|\\d{2})-((1[0-2])|(0?[1-9]))-(([12][0-9])|(3[01])|(0?[1-9]))"10./// 日期(月/日/年)
let isDate2: String = "((1[0-2])|(0?[1-9]))/(([12][0-9])|(3[01])|(0?[1-9]))/(\\d{4}|\\d{2})"11./// 时间(小时:分钟, 24小时制)
let TimeFormat: String = "((1|0?)[0-9]|2[0-3]):([0-5][0-9])"12./// 是汉字
let isChinese: String = "[\\u4e00-\\u9fa5]"13./// 中文及全角标点符号(字符)
let ChineseParagraph: String = "[\\u3000-\\u301e\\ufe10-\\ufe19\\ufe30-\\ufe44\\ufe50-\\ufe6b\\uff01-\\uffee]"14./// 中国大陆固定电话号码
let fixedLineTelephone: String = "(\\d{4}-|\\d{3}-)?(\\d{8}|\\d{7})"15./// 中国大陆身份证号(15位或18位)
let IdNum: String = "\\d{15}(\\d\\d[0-9xX])?"16./// 手机号
let isIphoneNum: String = "1\\d{10}"17./// 邮政编码
let zipCode: String = "[1-9]\\d{5}"复制代码

##新增加一些方法的扩展。如:UIView的扩展,富文本的扩展,UIColor的扩展,线程安全使用的扩展

3.UIView的一些扩展

主要是方便直接对视图控件x,y等等一系列的操作

这个比较简单,不做介绍,主要是 set,get,集成后直接用就行

extension UIView {var x: CGFloat {get {return frame.origin.x}set {frame = CGRect(x: newValue, y: frame.origin.y, width: frame.width, height: frame.height)}}........................复制代码

4.线程安全操作

在Oc中为了防止多线程中对某些资源的安全访问 引用了

@synchronized的操作,更多的关于多线程的知识 点我,这里大量篇幅的描述,会使你得到更多的收获。这里不做陈述

在Swift中已经移除了synchronized 的使用,相应的 我们可以直接使用:

objc_sync_enter
///资源的操作
objc_sync_exit

结合闭包的使用可以直接这样使用

public func synchronized(_ lock: AnyObject, closure: () -> ()) {objc_sync_enter(lock)closure()objc_sync_exit(lock)
}复制代码

相应的执行的时候你可以这样:

var test = 0
synchronized(test as AnyObject) {test = 1     // test 在该作用域不会被其他线程改变print(test)
}
/// 或者这样
synchronized(test as AnyObject, closure: {print(test)  // test 在该作用域不会被其他线程改变
})复制代码

这样你就可以愉快的使用了

5.对UIColor的扩展

都知道Xcode在8.0以后可以直接在代码中使用颜色编辑器,图片预览。这样大大的节省了我们的开发效率

而在于有时候的习惯的使用上来说,可能或多或少还有用代码来操作的,这里带给大家在使用代码的时候的一些方便

有时候在开发的过程中UI给的标注是 0xCE0755 这样的颜色标注,那么我们有时候就需要转换,当然在颜色编辑器里面是可以直接使用的。

转换如下:

public extension UIColor {/// Init color without divide 255.0////// - Parameters:///   - r: (0 ~ 255) red///   - g: (0 ~ 255) green///   - b: (0 ~ 255) blue///   - a: (0 ~ 1) alphaconvenience init(r: Int, g: Int, b: Int, a: CGFloat) {self.init(red: CGFloat(r) / 255, green: CGFloat(g) / 255, blue: CGFloat(b) / 255, alpha: a)}/// Init color without divide 255.0////// - Parameters:///   - r: (0 ~ 255) red///   - g: (0 ~ 255) green///   - b: (0 ~ 1) alphaconvenience init(r: Int, g: Int, b: Int) {self.init(r: r, g: g, b: b, a: 1)}/// Init color with hex code////// - Parameter hex: hex code (eg. 0x00eeee)convenience init(hex: Int) {self.init(r: (hex & 0xff0000) >> 16, g: (hex & 0xff00) >> 8, b: (hex & 0xff), a: 1)}}复制代码

这里要说的是主要原理就是: 先通过&运算,取得相应的颜色位,然后通过左移相应的位数来进行换算。这里就不多说了。传送门

6.富文本的一些操作,工程中非常清楚的介绍了使用,这里不做陈述了。

科学计数法转换
人民币的金额转换

更新继续,如果您觉得对你有帮助希望你给个 星星

直接访问 GitHub 看代码的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/260160.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用python庆祝生日_生日到底该过阴历还是阳历好呢?不是迷信,都怪我们大意!...

过生日到底该过阴历还是阳历&#xff1f;答案说出来你可能都不信在我们国家&#xff0c;过生日有两种不同的方式&#xff0c;因为有两种不同的日子的计算方式&#xff0c;分为阴历和阳历。一般来说&#xff0c;在农村和一些比较落后的地方&#xff0c;人们习惯于用阴历来计算生…

websphere jndi oracle,websphere7.0获得JNDI连接报invalid username/password

Exception in thread "P497968:O0:CT" java.sql.SQLException: ORA-01017: invalid username/password; logon deniedDSRA0010E: SQL 状态&#xff1a;72000&#xff0c;错误码&#xff1a;1,017at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapp…

WSS3.0自带数据库可以使用SQL 2005 Server Management Studio来管理

默认情况下&#xff0c;安装完WSS3.0后&#xff0c;会自动安装一个自带的SQL Server 2005 Embedded Edition数据库&#xff0c;但是此数据库却没有管理工具,不像安装SQL 2005其它版本会有管理工具。如果你要管理数据库&#xff0c;这时怎么办呢。经过俺试了一上午了&#xff0c…

CPU的高速缓存存储器知识整理

基于缓存的存储器层次结构 基于缓存的存储器层次结构行之有效&#xff0c;是因为较慢的存储设备比较快的存储设备更便宜&#xff0c;还因为程序往往展示局部性&#xff1a; 时间局部性&#xff1a;被引用过一次的存储器的位置很可能在不远的将来被再次引用。 空间局部性&#x…

uniapp光标自动定义到文本框_word技巧自动生成毕业论文目录

一篇word文档&#xff0c;内容有大的章&#xff0c;小的节。如何把章节抽出来生成目录&#xff1f;WORD →点击需要插入的地方 → 插入菜单 → 索引和目录 → 目录 → 确定。1 创建标题目录Word 一般是利用标题或者大纲级别来创建目录的。因此&#xff0c;在创建目录之前&#…

JSTL

2019独角兽企业重金招聘Python工程师标准>>> 说明 JSTL 是 JAVA 中的一个定制标记库集。实现了JSP页面中代码的复用&#xff0c;增加了JSP页面的可读性&#xff0c;方便查看和参与开发 使用 1.下载地址 http://archive.apache.org/dist/jakarta/taglibs/standard/bi…

[jQuery] event.stopPropagation()报错

使用jQuery给一个事件加处理方法时&#xff0c;为了阻止一个事件向上冒泡&#xff0c;使用了event.stopPropagation()&#xff0c;但在IE下却报对象不支持此属性或方法的错误&#xff08;IE下是event. cancelBubbletrue&#xff09;&#xff0c;jQuery不是兼容各浏览器吗&#…

中科燕园arcgis外包----排水管网地理信息系统

项目背景 绍兴县是浙江省第一个“数字城管”试点城市&#xff0c;也是全国第一个“数字城管”县级城市。随着经济的飞速发展、城市化步伐的加快&#xff0c;以及城市规模的扩大和现代化程度的不断提高&#xff0c;作为城市重要基础设施的城市地下管线也越来越庞大、密集&#x…

自然语言0_nltk中文使用和学习资料汇总

sklearn实战-乳腺癌细胞数据挖掘&#xff08;博主亲自录制视频教程&#xff09; https://study.163.com/course/introduction.htm?courseId1005269003&utm_campaigncommission&utm_sourcecp-400000000398149&utm_mediumshare http://blog.csdn.net/huyoo/article/…

python实现深度优先搜索_python中的深度优先搜索算法

假设我有一个函数&#xff0c;它接受一个输入($x iui$)&#xff0c;然后经过一个循环并生成一系列输出($x{I&#xff0c;j}$)。然后&#xff0c;每个输出可以再次作为同一函数的输入&#xff0c;从而产生更多的输出($x{i&#xff0c;j&#xff0c;k}$)。我试图通过这个函数找到…

mysql函数移植到oracle,oracle到mysql的迁移,函数部分

to_date(?, YYYY-MM-DD HH24:MI:SS)"STR_TO_DATE(2003-15-10 00:00:00,%Y-%m-%d %H:%i:%s); //格式不对&#xff0c;会返回NULLto_char(create_time,yyyy-MM-dd)DATE_FORMAT(create_time,%Y-%m-%d)sysdatenow()或者CURRENT_TIMESTAMP //1997-12-15 23:50:26,建表的时…

学习关于时间在sql里面的对比,用if语句(这个有点特别)

需求&#xff1a;假如当前时间是大于starttime且小于endtime的则按starttime倒序排列显示一条记录&#xff1b;假如当前时间小于starttime且小于endtime则按starttime正序排列显示一条记录。要在一次sql查询中完成。 这个是论坛里面的&#xff0c;人家给出答案了&#xff0c;我…

ruby中的回调方法和钩子方法

在ruby中&#xff0c;当某些特定的事件发生时&#xff0c;将调用回调方法和钩子方法。事件有如下几种&#xff1a; 调用一个不存在的对象方法类混含一个模块定义类的子类给类添加一个实例方法给对象添加一个单例方法引用一个不存在的常量对以上的事件&#xff0c;都可以为之编写…

超简单的JNI——NDK开发教程

不好意思各位&#xff0c;我按照网上一些教程进行JNI开发&#xff0c;折腾了半天也没成功&#xff0c;最后自己瞎搞搞定了&#xff0c;其实超简单的&#xff0c;网上的教程应该过时了&#xff0c;最新版的AS就包含了NDK编译的功能&#xff0c;完全不用手动javah&#xff0c;各种…

查询工资最低的3名员工的职工工号、姓名和收入_关于工资条,这6个常识必须掌握,事关你的权益!...

大状说&#xff1a;找大状&#xff0c;中小企业自己的法律顾问。今天为大家带来的文章&#xff0c;是《关于工资条&#xff0c;这6个常识必须掌握&#xff0c;事关你的权益&#xff01;》&#xff0c;是关于劳动法的内容&#xff0c;希望能给大家带来帮助。1、单位不发工资条的…

oracle查对象创建时间,oracle:查询某个时间之后,指定用户,指定对象类型,并创建的表的个数...

SQL> select COUNT(*) from dba_objects where created< to_date(17-01-14,dd-mm-yy) AND owner用户名 and object_typeTABLE;查询某个时间之后创建的表有哪些&#xff1a;SQL> select object_name,created from dba_objects where created> to_date(17-01-14,dd-…

年末跳槽

末日过了&#xff0c;大家都在准备着年会&#xff0c;年总结&#xff0c;年终奖。 而我却在烦着跳槽的事。 由于一个偶遇的机会&#xff0c;最近面试了公司B&#xff0c;面试过程还可以&#xff0c;跟公司B的技术管理人谈得还挺开心的。他也同意我的技术。 开始的时候&#xff…

SQL之用户自定义函数

关于SQL Server用户自定义的函数&#xff0c;有标量函数、表值函数&#xff08;内联表值函数、多语句表值函数&#xff09;两种。 题外话&#xff0c;可能有部分朋友不知道SQL Serve用户自定义的函数应该是写在哪里&#xff0c;这里简单提示一下&#xff0c;在Microsoft SQL Se…

hdoj3351-stack

Problem DescriptionI’m out of stories. For years I’ve been writing stories, some rather silly, just to make simple problems look difficult and complex problems look easy. But, alas, not for this one.You’re given a non empty string made in its entirety f…

vb语言程序设计_如果编程语言难度决定头发浓度,学这语言的可能要光头了

对于程序员来说&#xff0c;头发真的比什么都重要&#xff0c;甚至很多程序员&#xff0c;大量的人民币都花在了后续植发上。甚至网上还流行这么一句话&#xff0c;你发际线越高&#xff0c;编程能力越高&#xff0c;那对于程序员来说&#xff0c;那么多语言&#xff0c;到底哪…