作者:嘻洋洋链接:https://www.jianshu.com/p/9972d7b33061来源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
数据库预编译起源(1)数据库SQL语句编译特性:数据库接受到sql语句之后,需要词法和语义解析,优化sql语句,制定执行计划。这需要花费一些时间。但是很多情况,我们的一条sql语句可能会反复执行,或者每次执行的时候只有个别的值不同(比如query的where子句值不同,update的set子句值不同,insert的values值不同)。(2)减少编译的方法如果每次都需要经过上面的词法语义解析、语句优化、制定执行计划等,则效率就明显不行了。为了解决上面的问题,于是就有了预编译,预编译语句就是将这类语句中的值用占位符替代,可以视为将sql语句模板化或者说参数化。一次编译、多次运行,省去了解析优化等过程。(3)缓存预编译预编译语句被DB的编译器编译后的执行代码被缓存下来,那么下次调用时只要是相同的预编译语句就不需要编译,只要将参数直接传入编译过的语句执行代码中(相当于一个涵数)就会得到执行。并不是所以预编译语句都一定 ...
编程分享
未读翻译自:https://docs.swift.org/swift-book/LanguageGuide/Subscripts.html
类、结构和枚举可以定义下标,下标是访问集合、列表或序列成员元素的快捷方式。您可以使用下标按索引设置和检索值,而无需单独的设置和检索方法。例如,您可以以someArray[index]的形式访问数Array实例中的元素,以someDictionary[key]的形式访问aDictionary实例中的元素。
您可以为单个类型定义多个下标,并根据您传递给下标的索引值类型选择要使用的相应下标重载。下标不限于单个维度,您可以使用多个输入参数定义下标,以满足自定义类型的需求。
下标语法下标使您能够通过在实例名称后的方括号中写入一个或多个值来查询类型的实例。它们的语法与实例方法语法和计算属性语法相似。您使用下标关键字编写下标定义,并以与实例方法相同的方式指定一个或多个输入参数和返回类型。与实例方法不同,下标可以是读写或只读。此行为由获取者和设置器以与计算属性相同的方式进行通信:
subscript(index: Int) -> Int {
get {
...
编程分享
未读翻译自:https://docs.swift.org/swift-book/LanguageGuide/OpaqueTypes.html
具有不透明返回类型的函数或方法隐藏其返回值的类型信息。返回值不是提供具体类型作为函数的返回类型,而是根据其支持的协议来描述。隐藏类型信息在调用模块的模块和代码之间的边界上非常有用,因为返回值的底层类型可以保持私密性。与返回类型为协议类型的值不同,不透明类型保留类型标识——编译器可以访问类型信息,但模块的客户端不能访问。
不透明类型解决的问题例如,假设您正在编写一个绘制ASCII艺术形状的模块。ASCII艺术形状的基本特征是draw()函数,该函数返回该形状的字符串表示形式,您可以将其用作Shape协议的要求:
protocol Shape {
func draw() -> String
}
struct Triangle: Shape {
var size: Int
func draw() -> String {
var result: [String] = []
for length in 1…size ...
docs swift | swift learn | youtube | runoob
本站基于swift 5.6进行描述,版本升级带来的变动会以独立文件展示。
翻译自:https://docs.swift.org/swift-book/
Swift 是编写软件的绝佳方式,无论是手机、台式机、服务器还是任何其他运行代码的内容。这是一种安全、快速和互动的编程语言,它结合了现代语言思维的最佳与更广泛的苹果工程文化的智慧以及开源社区的各种贡献。编译器针对性能进行了优化,语言也针对开发进行了优化,同时不影响两者。
Swift对新程序员很友好。它是一种工业质量的编程语言,与脚本语言一样富有表现力和乐趣。在 playground 中编写 Swift 代码可以让您尝试代码并立即查看结果,而无需构建和运行应用程序。
Swift通过采用现代编程模式定义了大类常见编程错误:
变量总是在使用前初始化。
检查数组索引是否有越界错误。
检查整数是否溢出。
可选确保显式处理nil值。
内存是自动管理的。
错误处理允许从意外故障中控制恢复。
Swift代码经过编译和优化,以充分利用现代硬件。语法和标准库是根 ...
编程分享
未读翻译自:https://docs.swift.org/swift-book/LanguageGuide/MemorySafety.html
默认情况下,Swift 可以防止代码中出现不安全行为。例如,Swift确保变量在使用前初始化,在释放后无法访问内存,并检查数组索引是否有越界错误。
Swift 还要求修改内存位置的代码独占该内存访问权限,从而确保对同一内存区域的多次访问不会发生冲突。由于 Swift 会自动管理内存,因此在大多数情况下,您根本不需要考虑访问内存。然而,了解潜在冲突在哪里可能发生很重要,这样您就可以避免编写内存访问冲突的代码。如果您的代码确实包含冲突,您将收到编译时或运行时错误。
了解内存访问冲突当您执行设置变量值或将参数传递给函数等操作时,代码中会发生对内存的访问。例如,以下代码包含读取访问和写入访问:
// A write access to the memory where one is stored.
var one = 1
// A read access from the memory where on ...
编程分享
未读翻译自:https://docs.swift.org/swift-book/LanguageGuide/Functions.html
函数是执行特定任务的自包含的代码块。您给函数一个名称来标识它的作用,该名称用于在需要时“调用”该函数以执行其任务。
Swift的统一函数语法足够灵活,可以表达任何东西,从没有参数名称的简单C型函数到带有每个参数名称和参数标签的复杂Objective-C风格方法。参数可以提供默认值来简化函数调用,并且可以作为输入输出参数传递,这些参数在函数完成执行后修改传递的变量。
Swift中的每个函数都有一个类型,由函数的参数类型和返回类型组成。您可以像 Swift 中的任何其他类型一样使用此类型,这样可以轻松地将函数作为参数传递给其他函数,并从函数返回函数。函数也可以写入其他函数,以封装嵌套函数范围内的有用功能。
定义和调用函数当您定义函数时,您可以选择定义函数作为输入的一个或多个命名类型值,称为参数。您还可以选择定义一种值类型,该函数将在完成后作为输出传递回,称为其返回类型。
每个函数都有一个函数名,该函数名描述了函数执行的任务。要使用函数,您可以“调用”该函数及 ...
编程分享
未读
docker 命令
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273# 查看docker版本。docker -vdocker version# 查看docker系统信息docker info# 搜索镜像docker search 镜像# 获取镜像docker pull 镜像仓库地址# 上传镜像docker push 镜像仓库地址# 查看镜像的创建历史docker history 镜像仓库地址# 运行容器# -name 定义一个容器的名字# -d 标识是让 docker 容器的后台运行。# -p 标识通知 docker 将容器内部使用的网络端口映射到我们使用的主机上。docker run --name nginx -p 8080:80 nginx# 查询容器内部ip地址docker inspect 容器ID/容器名 | grep IPAddress# 列出容器 ...
编程分享
未读翻译自:https://docs.swift.org/swift-book/LanguageGuide/Protocols.html
协议定义了适合特定任务或功能的方法、属性和其他要求的蓝图。然后,该协议可以由类、结构或枚举采用,以提供这些要求的实际实现。任何满足协议要求的类型都被称为符合该协议。
除了指定符合类型必须实现的要求外,您还可以扩展协议来实现其中一些需求或实现符合类型可以利用的其他功能。
协议语法您以与类、结构和枚举非常相似的方式定义协议:
protocol SomeProtocol {
// protocol definition goes here
}
自定义类型声明,他们采用特定协议,将协议的名称放在类型名称之后,用冒号分隔,作为其定义的一部分。可以列出多个协议,并用逗号分隔:
struct SomeStructure: FirstProtocol, AnotherProtocol {
// structure definition goes here
}
如果一个类有一个超类,请在它采用的任何协议之前列出超类名 ...
编程分享
未读翻译自:https://docs.swift.org/swift-book/LanguageGuide/OptionalChaining.html
可选链是一个在当前可能为nil的可选链上查询和调用属性、方法和下标的过程。如果可选包含值,则属性、方法或下标调用成功;如果可选值为nil,则属性、方法或下标调用返回nil。多个查询可以链接在一起,如果链中的任何链接为nil整个链条会优雅地失败。
注意
Swift中的可选链类似于Objective-C中的消息nil,但以适用于任何类型的方式,并且可以检查成功或失败。
可选链作为强制打开包装的替代方案您通过放置问号(?)来指定可选的链条在可选值之后,如果可选值为非nil在您希望调用属性、方法或下标的可选值之后。这与放置感叹号(!)非常相似在可选值之后,强制展开其值。主要区别在于,当可选链接为nil,可选链会优雅地失败,而当可选链接为nil,强制展开包装会触发运行时错误。
为了反映可选链可以在nil值上调用的事实,可选链调用的结果始终是可选值,即使您正在查询的属性、方法或下标返回非可选值。您可以使用此可选返回值来检查可选链调用是否成功(返回的可选 ...