实例方法 允许在类、结构和枚举中定义实例方法。一个实例方法可以调用该类型内所有的实例方法,可以访问该类型内的所有属性。 class Counter { func increment() { // 方法实现 } } let counter = Counter() counter.increment() 从根本上来讲,方法跟函数的本质是一样的,只不过方法跟定义它的类型有关,不能像函数一样单独调用。所以,方法的参数定义与函数的参数定义原则也是一致的,默认地,Swift会给第一个参数一个本地参数名,会给第二个以及之后的参数一个本地和外部参数名。例如下面代码看到的。 class Counter { func incrementBy(amount: Int, numberOfTimes: Int) { // 等效于incrementBy(_ amount: Int, numberOfTimes numberOfTimes: Int) // 方法实现 } } 当然,如果你觉得默认的参数定义无法满足你的要求,你也可以显式地定义每个参数的本地参数名和外部参数名。记住,主动权在你。 我们知道,结构和枚举是值类型,对于值类型,它的
public class StringUtils { public static boolean isNullOrEmpty(String stringValue) { return stringValue == null || stringValue.isEmpty(); } public static String trim(String stringValue) { return isNullOrEmpty(stringValue) ? stringValue : stringValue.trim(); } public static String numberToHalfWidth(String stringValue) { if (isNullOrEmpty(stringValue)) { return stringValue; } return stringValue.replace('0', '0') .replace('1', '1') .replace('2', '2') .replace('3', '3') .replace('4', '4') .replace('5', '5') .re
关键字: DISTINCT 用于返回唯一不同的值。 SELECT DISTINCT column1, column2, ... FROM table_name 关键字: TOP、LIMIT、ROWNUM 用于规定要返回的记录的数目。 SQL Server: SELECT TOP 2 * FROM table_name SELECT TOP 50 PERCENT * FROM table_name MySQL: SELECT * FROM table_name LIMIT 5 Oracle: SELECT * FROM table_name WHERE ROWNUM <= 5 操作符: [NOT] LIKE 用于在WHERE子句中搜索列中的指定模式。 SELECT * FROM table_name WHERE column_name LIKE 'N%' -- 其中'%'为SQL通配符 SQL通配符必须与LIKE运算符一起使用。 %: 替代一个或多个字符 _: 仅替代一个字符 [^charlist]或[!charlist]: 不在字符列中的任何单一字符 操作符: [NOT] IN 用于在WHERE子句中筛选多个
//codefile:DateTime.swift import Foundation class DateTime { static var now: DateTime { return DateTime(Date()) } static func parse(dateString: String, format: String, defaultValue: DateTime) -> DateTime { let dateFormatter = DateFormatter() dateFormatter.dateFormat = format dateFormatter.locale = .current if let date = dateFormatter.date(from: dateString) { return DateTime(date) } return defaultValue; } private let _date: Date init() { let components = DateComponents(year: 1, month: 1, day: 1, hour: 0, min
时间概念 UTC时间:世界标准时间,接近于0时区上的时间表示。 本地时间:本地时区上时间表示,例如北京处于东八区,则在UTC时间上再加上8小时即为北京时间。 Unix时间戳:0时区上自1970年1月1日零点起到现在的总秒数。 .NET DateTime类型 属性Kind,表示时间类别,枚举类型: Utc: 表示UTC时间 Local: 表示本地时间 属性Ticks,当前时间类别(Kind),自0001年1月1日零点起到现在以100毫微妙(10^-7秒)为单位的数量。 UTC时间最小值:new DateTime(0, DateTimeKind.Utc) 本地时间最小值:new DateTime(TimeZone * 60 * 60 * 10000000, DateTimeKind.Local) 时间戳计算 时间戳(Unix) -> 本地时间(Local) Unix + UTC1970 + TimeZone = Local 本地时间(Local) -> 时间戳(Unix) Local - TimeZone - UTC1970 = Unix
关于闭包 所谓闭包,就是一段自包含的代码块,它可以作为常量、变量使用。对于闭包,它能够捕捉和存储在定义它的上下文中任何常量和变量的引用。 全局函数、内联函数实际上就是一种特殊的闭包形式。闭包总共有三种形式: 全局函数是一种带有名字但是不捕捉任何值的闭包形式。 内联函数是一种带有名字并且捕捉来自包含它的函数内的值的闭包形式。 闭包表达式是一种不带名字、使用轻量级语法的闭包形式,能够捕捉来自包含它们上下文的值。 闭包表达式 闭包表达式基本由闭包参数(参数名称和参数类型)、返回类型、关键字in和闭包体组成,语法形式: { (parameters) -> return_type in // 闭包体 } 闭包参数可以是常量参数、变量参数和输入输出参数。不允许带默认值。可以使用变长参数,但是必须给这个变长参数命名。元祖类型也能被使用。 names.sorts({ (s1: String, s2: String) -> Bool in return s1 > s2 }) names.sorts( { (s1: String, s2: String) -> Bool in return s1 > s2 } ) 特别地,若闭包
HTTP Upgrade机制可以用来将HTTP连接升级到WebSocket连接,需要用到Upgrade和Connection头。对于代理服务器,需要将来自客户端的Upgrade请求带到后端服务器上,同时保持长连接。 location /ws/ { proxy_pass http://wsbackend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; }
一个月期限已到,第三本书也是在昨晚刚刚读完。 《杀手的礼物》,听着书名,会想到冷酷,严肃,但其实是温暖,诙谐的。 《杀手的礼物》,看着书名,会认为是一部完整的小说。但其实是由一些独立的故事组成。 《杀手的礼物》,400来页的书,我以为很精彩,最多2晚就可以读完,可是我整整花了一个星期才看完最后一个故事。 说真的,这本书,想讲的主题是什么,看完我也不明白。就像我们看一部肥皂剧,看了就看了,其实没有留下什么营养。不过看书,有一点好,识字。比如说旻(min):天空,特指秋季的天空。 谍战剧中,里面的杀手一般都可以用阴暗,聪明,酷,有钱,严苛的,冷酷无情来形容。 但是这本书,却颠覆了传统杀手的形象。 首先,阴暗。杀手一般不都是暗地里交易,而且隐秘性特别好吗?而这里面的杀手,却可以在酒吧里面挂个杀手排行榜,在微信朋友圈里面晒各自的生活以及具体位置。这样也太不安全了。 其次,聪明,酷,有钱。 一般杀手不都是上知天文,下知生物地理,而且动手能力极强吗?随便倒拾,任何稀疏平常的东西都能变成利器。而这里面的主人公,确因为找不到工作,没有办法,最后选择当了杀手。而且,作为杀手,还计较每个圣诞节,杀手组里送的圣诞小礼物,更别说拥有
钝:迟钝,反应慢,反应弱 这本书讲的是生活,工作中锻炼我们的弱感知力很重要。 简单一点来说,就是对于如意的事情时,缩小自己的欣喜度,才不会得意忘形,才会继续奋斗努力。对于不如意的事情,心放宽些,自己才会更快乐,不易失意忘形。然后就是从医学的角度阐释,削弱自己对外界事物的敏感度了,有多么重要。 最近听了太多讲道理的书籍,虽然每一本看上去都是讲不同的内容,其实道理都可以互通。 比如说钝感力, 可以和幸福的婚姻里面讲的包容,有类似的意思。 我的钝感力还不够,工作中,常常会因为一些小事,而短暂的不快,虽然有时只是影响几秒,到一两分钟(自己现在基本可以在短暂时间内,平复这种情绪的波动)。但是,如果一周,这种情绪的波动很常见,会让自己很受挫。真正的钝感力,是压根就感觉不到类似这种外来因素。自己还是需要在脾性,修养方面,多锻炼,锻炼。 接下来几天,不打算再听樊登读书了,全是道理,听多了,都会听觉疲劳。
OpenCover NuGet: https://www.nuget.org/packages/OpenCover/ 安装: Install-Package OpenCover -Version 4.6.519 csproj文件添加: <DebugType>Full</DebugType> cd C:\Users\用户名\.nuget\packages\opencover\4.6.519\tools OpenCover.Console.exe -target:"C:\Program Files\dotnet\dotnet.exe" -targetargs:"test xUnit项目csproj路径" -register:user -filter:"+[*]* -[xunit*]*" -oldStyle -output:"Xml报告文件路径" OpenCover.Console.exe -target:"C:\Program Files\dotnet\dotnet.exe" -targetargs:"test D:\git\qi\test\Qi.xUnit\Qi.xUnit.csproj" -register: