编程分享
未读
记录遇见过的bug
1. docker容器自动退出的问题容器经常用了一段时间就自动退出了,docker ps已经找不到了,在docker ps -a里面了。
问题思路:docker run指定的命令如果不是那些一直挂起的命令(比如运行top,不断echo),就是会自动退出的。-d命令是设置detach为true,根据官方的文档,意思是让这个命令在后台运行,但并不是一直运行,Docker容器后台运行,就必须有一个前台进程。主线程结束,容器会退出。
我们启动容器的时候不要-d命令启动,用-dit就好了
例如:
docker run -d hello-world(不要这么做)
docker run -dit hello-world(推荐)
编程分享
未读翻译自:https://docs.swift.org/swift-book/LanguageGuide/Methods.html
方法是与特定类型关联的函数。类、结构和枚举都可以定义实例方法,这些方法封装了处理给定类型实例的特定任务和功能。类、结构和枚举还可以定义类型方法,这些方法与类型本身相关联。类型方法类似于Objective-C中的类方法。
结构和枚举可以在Swift中定义方法,这一事实与C和Objective-C有很大区别。在Objective-C中,类是唯一可以定义方法的类型。在 Swift 中,您可以选择是定义类、结构还是枚举,并且仍然可以灵活地定义您创建的类型上的方法。
实例方法实例方法是属于特定类、结构或枚举实例的函数。它们支持这些实例的功能,要么通过提供访问和修改实例属性的方法,要么通过提供与实例目的相关的功能。实例方法具有与函数完全相同的语法,如函数中所述。
您可以在它所属类型的打开和关闭大括号中编写实例方法。实例方法可以隐式访问该类型的所有其他实例方法和属性。实例方法只能调用其所属类型的特定实例。没有现有实例,就无法孤立地调用它。
以下是定义简单Counter类的 ...
编程分享
未读翻译自:https://docs.swift.org/swift-book/LanguageGuide/Enumerations.html
枚举为一组相关值定义了通用类型,并使您能够在代码中以类型安全的方式处理这些值。
如果您熟悉C,您将知道C枚举为一组整数值分配相关名称。Swift 中的枚举要灵活得多,不必为每个枚举案例提供值。如果为每个枚举情况提供了一个值(称为原始值),则该值可以是字符串、字符或任何整数或浮点类型的值。
或者,枚举大小写可以指定要存储的任何类型的关联值,以及每个不同的大小写值,就像其他语言中的联合或变体一样。您可以将一组常见的相关情况定义为一个枚举的一部分,每个枚举都有与之关联的不同类型值集。
Swift 中的枚举本身就是一流的类型。它们采用了许多传统上仅由类支持的功能,例如计算属性以提供有关枚举当前值的更多信息,以及实例方法,以提供与枚举所代表的值相关的功能。枚举还可以定义初始化器以提供初始大小写值;可以扩展其功能,使其功能超出原始实现;并且可以遵守协议以提供标准功能。
有关这些功能的更多信息,请参阅属性、方法、初始化、扩展和协议。
枚举语法您使用enum关键字 ...
编程分享
未读翻译自:https://docs.swift.org/swift-book/LanguageGuide/TypeCasting.html
类型转换是一种检查实例类型的方法,或将该实例视为与自身类层次结构中其他地方不同的超类或子类。
Swift中的类型转换是用is``as运算符实现的。这两个运算符提供了一种简单而富有表现力的方式来检查值的类型或将值转换为其他类型。
您还可以使用类型转换来检查类型是否符合协议,如“检查协议一致性”中所述。
定义类型铸造的类层次结构您可以使用带有类和子类层次结构的类型转换来检查特定类实例的类型,并将该实例转换为同一层次结构中的另一个类。下面的三个代码片段定义了类的层次结构和包含这些类实例的数组,用于类型转换示例。
第一个片段定义了一个名为MediaItem的新基类。该类为数字媒体库中出现的任何类型的项目提供基本功能。具体来说,它声明String类型的name属性和initname初始化器。(假设所有媒体项目,包括所有电影和歌曲,都将有一个名称。)
class MediaItem {
var name: String
init(name: Strin ...
编程分享
未读翻译自:https://docs.swift.org/swift-book/LanguageGuide/ClassesAndStructures.html
结构和类是通用的、灵活的结构,成为程序代码的构建块。您定义属性和方法,使用定义常量、变量和函数的相同语法为结构和类添加功能。
与其他编程语言不同,Swift不要求您为自定义结构和类创建单独的接口和实现文件。在Swift中,您在单个文件中定义结构或类,该类或结构的外部接口会自动供其他代码使用。
注意
类的实例传统上被称为对象。然而,与其他语言相比,Swift结构和类的功能要接近得多,本章的大部分内容描述了适用于类或结构类型的实例的功能。因此,使用了更通用的术语实例。
比较结构和类Swift中的结构和类有很多共同点。两者都可以:
定义属性以存储值
定义提供功能的方法
定义下标,以使用下标语法提供对其值的访问
定义初始化器以设置其初始状态
扩展以将其功能扩展到默认实现之外
符合协议,提供某种类型的标准功能
有关更多信息,请参阅属性、方法、下标、初始化、扩展和协议。
类具有结构所没有的额外功能:
继承使一个类继承另一个类的特征。
...
编程分享
未读翻译自:https://docs.swift.org/swift-book/LanguageGuide/Inheritance.html
一个类可以从另一个类继承方法、属性和其他特征。当一个类从另一个类继承时,继承类被称为子类,它继承的类被称为其超类。继承是一种基本行为,可以将类与 Swift 中的其他类型区分开来。
Swift中的类可以调用和访问属于其超类的方法、属性和下标,并可以提供这些方法、属性和下标的覆盖版本,以细化或修改其行为。Swift通过检查覆盖定义是否具有匹配的超类定义来帮助确保您的覆盖正确。
类还可以将属性观察者添加到继承的属性中,以便在属性值发生变化时收到通知。属性观察者可以添加到任何属性中,无论它最初是否被定义为存储或计算属性。
定义基类任何不从另一个类继承的类都被称为基类。
注意
Swift类不会从通用基类继承。您在不指定超类的情况下定义的类会自动成为供您构建的基类。
下面的示例定义了一个名为Vehicle的基类。该基类定义了一个名为currentSpeed存储属性,默认值为0.0(推断Double的属性类型)。currentSpeed属性的值被称为descri ...
编程分享
未读翻译自:https://docs.swift.org/swift-book/LanguageGuide/AutomaticReferenceCounting.html
Swift 使用自动参考计数 (ARC) 来跟踪和管理 app 的内存使用情况。在大多数情况下,这意味着内存管理在Swift中“有效”,您无需自己考虑内存管理。当不再需要类实例时,ARC会自动释放类实例使用的内存。
然而,在少数情况下,ARC需要有关代码部分之间关系的更多信息,以便为您管理内存。本章介绍了这些情况,并展示了如何启用ARC来管理应用程序的所有内存。在Swift中使用ARC与过渡到ARC发布说明中描述的将ARC与Objective-C一起使用的方法非常相似。
引用计数仅适用于类实例。结构和枚举是值类型,而不是引用类型,不会通过引用存储和传递。
ARC的工作原理每次您创建类的新实例时,ARC都会分配一大块内存来存储有关该实例的信息。此内存包含有关实例类型的信息,以及与该实例关联的任何存储属性的值。
此外,当不再需要实例时,ARC会释放该实例使用的内存,以便将内存用于其他目的。这确保了类实例在不再需要时不会占用内 ...
编程分享
未读翻译自:https://docs.swift.org/swift-book/LanguageGuide/AccessControl.html
访问控制限制从其他源文件和模块中的代码访问部分代码。此功能使您能够隐藏代码的实现详细信息,并指定可以访问和使用该代码的首选界面。
您可以为单个类型(类、结构和枚举)以及属于这些类型的属性、方法、初始化器和下标分配特定的访问级别。协议可以限制在特定上下文中,全局常量、变量和函数也是如此。
除了提供不同级别的访问控制外,Swift还通过为典型场景提供默认访问级别来减少指定显式访问控制级别的需求。事实上,如果您正在编写单个目标应用程序,您可能根本不需要指定显式访问控制级别。
注意
代码中可以对其应用访问控制的各个方面(属性、类型、函数等)在以下章节中称为“实体”,以方便简洁。
模块和源文件Swift的访问控制模型基于模块和源文件的概念。
模块是代码分发的单个单元,即一个框架或应用程序,作为单个单元构建和发布,并且可以通过另一个具有Swiftimport关键字的模块导入。
Xcode 中的每个构建目标(如 app 套装或框架)在 Swift 中被视为一个 ...
编程分享
未读翻译自:https://docs.swift.org/swift-book/LanguageGuide/Generics.html
通用代码使您能够编写灵活、可重用的函数和类型,这些函数和类型可以根据您定义的要求适用于任何类型。您可以编写避免重复的代码,并以清晰、抽象的方式表达其意图。
通用是Swift最强大的功能之一,Swift标准库的大部分都是用通用代码构建的。事实上,即使您没有意识到这一点,您也一直在使用整个语言指南中的泛型。例如,Swift的Array和Dictionary类型都是通用集合。您可以创建一个包含Int值的数组,或包含String值的数组,或者为可以在Swift中创建的任何其他类型的数组。同样,您可以创建一个字典来存储任何指定类型的值,并且该类型没有限制。
通用解决的问题这里有一个名为swapTwoInts(_:_:)的标准非通用函数,它交换了两个Int值:
func swapTwoInts(_ a: inout Int, _ b: inout Int) {
let temporaryA = a
a = b
b = tem ...
编程分享
未读翻译自:https://docs.swift.org/swift-book/LanguageGuide/ErrorHandling.html
错误处理是响应程序中的错误条件并从中恢复的过程。Swift为在运行时抛出、捕获、传播和操作可恢复错误提供一流的支持。
一些操作不能保证总是完成执行或产生有用的输出。可选用于表示值的缺失,但当操作失败时,了解导致故障的原因通常是有用的,以便您的代码可以做出相应的响应。
例如,考虑从磁盘上的文件中读取和处理数据的任务。此任务有多种方式可能失败,包括文件在指定路径上不存在,文件没有读取权限,或文件没有以兼容格式编码。区分这些不同情况允许程序解决一些错误,并向用户传达任何无法解决的错误。
注意
Swift中的错误处理与Cocoa和Objective-C中使用NSError类的错误处理模式互操作。有关本课程的更多信息,请参阅在Swift中处理可可错误。
表示和抛出错误在 Swift 中,错误由符合Error协议的类型值表示。这个空协议表示一种类型可用于错误处理。
Swift枚举特别适合对一组相关错误条件进行建模,相关值允许传达有关错误性质的额外信息。例如, ...