Swift基础
「已注销」
软件开发
展开
-
Swift-集合类型
集合类型Swift 语言提供数组(Array)、集合(Set)和字典(Dictionary)三种基本的集合类型用来存储集合数据。数组是有序数据的集集合是无序无重复数据的集字典是无序的键值对的集1. 数组(Arrays)1.1 定义数组使用有序列表存储同一类型的多个值。相同的值可以多次出现在一个数组的不同位置中。创建一个空数组var someInts = [Int]() /...原创 2019-07-29 11:01:18 · 143 阅读 · 0 评论 -
Swift-错误处理
错误处理(Error handling) 是响应错误以及从错误中恢复的过程。Swift 在运行时提供了抛出、捕获、传递和操作可恢复错误(recoverable errors)的一等支持(first-class support)。1. 表示与抛出错误在 Swift 中,错误用遵循 Error 协议的类型的值来表示。这个空协议表明该类型可以用于错误处理。Swift 的枚举类型尤为适合构建...原创 2019-08-09 14:40:35 · 167 阅读 · 0 评论 -
Swift-类型转换
类型转换可以判断实例的类型,也可以将实例看做是其父类或者子类的实例。类型转换在 Swift 中使用 is 和 as 操作符实现。也可以用它来检查一个类型是否遵循了某个协议。1. 为类型转换定义类层次可以将类型转换用在类和子类的层次结构上,检查特定类实例的类型并且转换这个类实例的类型成为这个层次结构中的其他类型。/*这个类为任何出现在数字媒体库的媒体项提供基础功能。特别的,它声...原创 2019-08-09 15:00:34 · 146 阅读 · 0 评论 -
Swift-嵌套类型
枚举常被用于为特定类或结构体实现某些功能。类似地,枚举可以方便的定义工具类或结构体,从而为某个复杂的类型所使用。Swift 允许你定义嵌套类型,可以在支持的类型中定义嵌套的枚举、类和结构体。要在一个类型中嵌套另一个类型,将嵌套类型的定义写在其外部类型的 {} 内,而且可以根据需要定义多级嵌套。1. 嵌套类型实践BlackjackCard 结构体包含两个嵌套定义的枚举类型 Suit ...原创 2019-08-09 15:12:54 · 167 阅读 · 0 评论 -
Swift-扩展
扩展可以给一个现有的类,结构体,枚举,还有协议添加新的功能。拥有不需要访问被扩展类型源代码就能完成扩展的能力(即逆向建模)。(扩展和 Objective-C 的分类很相似,与 Objective-C 分类不同的是,Swift 扩展是没有名字的。)Swift 中的扩展可以:添加计算型实例属性和计算型类属性定义实例方法和类方法提供新的构造器定义下标定义和使用新的嵌套类型使已经存在...原创 2019-08-09 15:39:33 · 152 阅读 · 0 评论 -
Swift-方法
1. 实例方法(Instance Methods)实例方法是属于某个特定类、结构体或者枚举类型实例的方法。实例方法提供访问和修改实例属性的方法或提供与实例目的相关的功能,并以此来支撑实例的功能。实例方法的语法与函数完全一致。实例方法要写在它所属的类型的前后大括号之间。实例方法能够隐式访问它所属类型的所有的其他实例方法和属性。实例方法只能被它所属的类的某个特定实例调用。实例方法不能脱...原创 2019-08-07 14:36:18 · 127 阅读 · 0 评论 -
Swift-协议
协议 定义了一个蓝图,规定了用来实现某一特定任务或者功能的方法、属性,以及其他需要的东西。类、结构体或枚举都可以遵循协议,并为协议定义的这些要求提供具体实现。某个类型能够满足某个协议的要求,就可以说该类型遵循这个协议。除了遵循协议的类型必须实现的要求外,还可以对协议进行扩展,通过扩展来实现一部分要求或者实现一些附加功能,这样遵循协议的类型就能够使用这些功能。1. 协议语法协议的定义...原创 2019-08-12 21:06:15 · 175 阅读 · 0 评论 -
Swift-下标
1. 下标语法下标允许你通过在实例名称后面的方括号中传入一个或者多个索引值来对实例进行存取。定义下标使用 subscript 关键字,指定一个或多个输入参数和返回类型。与实例方法不同的是,下标可以设定为读写或只读。这种行为由 getter 和 setter 实现,有点类似计算型属性:subscript(index: Int) -> Int { get { //...原创 2019-08-07 14:59:18 · 149 阅读 · 0 评论 -
Swift-访问控制
访问控制可以限定其它源文件或模块中的代码对你的代码的访问级别。这个特性可以让我们隐藏代码的一些实现细节,并且可以为其他人可以访问和使用的代码提供接口。可以明确地给单个类型(类、结构体、枚举)设置访问级别,也可以给这些类型的属性、方法、构造器、下标等设置访问级别。协议也可以被限定在一定的范围内使用,包括协议里的全局常量、变量和函数。1. 模块和源文件Swift 中的访问控制模型基于模...原创 2019-08-14 14:26:06 · 160 阅读 · 0 评论 -
Swift-高级运算符
与 C 语言中的算术运算符不同,Swift 中的算术运算符默认是不会溢出的。所有溢出行为都会被捕获并报告为错误。如果想让系统允许溢出行为,可以选择使用 Swift 中另一套默认支持溢出的运算符,比如溢出加法运算符(&+)。所有的这些溢出运算符都是以 & 开头的。1. 位运算符位运算符可以操作数据结构中每个独立的比特位。它们通常被用在底层开发中,比如图形编程和创建设...原创 2019-08-14 15:26:54 · 198 阅读 · 0 评论 -
Swift-泛型
泛型代码让你能根据自定义的需求,编写出适用于任意类型的、灵活可复用的函数及类型。你可避免编写重复的代码,而是用一种清晰抽象的方式来表达代码的意图。1. 泛型解决的问题下面是一个标准的非泛型函数 swapTwoInts(:原创 2019-08-13 11:07:59 · 112 阅读 · 0 评论 -
Swift-不透明类型
具有不透明返回类型的函数或方法会隐藏返回值的类型信息。函数不再提供具体的类型作为返回类型,而是根据它支持的协议来描述返回值。在处理模块和调用代码之间的关系时,隐藏类型信息非常有用,因为返回的底层数据类型仍然可以保持私有。而且不同于返回协议类型,不透明类型能保证类型一致性 —— 编译器能获取到类型信息,同时模块使用者却不能获取到。1. 不透明类型解决的问题假设你正在写一个模块,用来绘...原创 2019-08-13 11:35:16 · 304 阅读 · 0 评论 -
Swift-属性
1. 存储属性一个存储属性就是存储在特定类或结构体实例里的一个常量或变量。可以是变量存储属性(用关键字 var 定义)。也可以是常量存储属性(用关键字 let 定义)。struct FixedLengthRange { var firstValue: Int let length: Int}var rangeOfThreeItems = FixedLengthRan...原创 2019-08-07 11:50:18 · 174 阅读 · 0 评论 -
Swift-可选链
可选链式调用是一种可以在当前值可能为 nil 的可选值上请求和调用属性、方法及下标的方法。如果可选值有值,那么调用就会成功。如果可选值是 nil,那么调用将返回 nil。多个调用可以连接在一起形成一个调用链,如果其中任何一个节点为 nil,整个调用链都会失败,即返回 nil。Swift 的可选链式调用可以应用于任意类型,并且能检查调用是否成功。1. 使用可选链式调用代替强制展开通...原创 2019-08-09 10:29:13 · 109 阅读 · 0 评论 -
Swift-内存安全
默认情况下,Swift 会阻止你代码里不安全的行为。例如:Swift 会保证变量在使用之前就完成初始化,在内存被回收之后就无法被访问并且数组的索引会做越界检查。Swift 也保证同时访问同一块内存时不会冲突,通过约束代码里对于存储地址的写操作,去获取那一块内存的访问独占权。因为 Swift 自动管理内存,所以大部分时候你完全不需要考虑内存访问的事情。然而,理解潜在的冲突也是很重...原创 2019-08-13 15:40:47 · 189 阅读 · 0 评论 -
Swift-控制流
1. For in 循环遍历一个集合中的所有元素。 例如:数组中的元素、范围内的数字或者字符串中的字符。遍历一个数组所有元素:let names = ["Anna", "Alex", "Brian", "Jack"]for name in names { print("Hello, \(name)!")}// Hello, Anna!// Hello, Alex!// ...原创 2019-08-02 16:43:41 · 257 阅读 · 0 评论 -
Swift-函数
1. 函数的定义与调用以 func 作为前缀。函数返回类型: ->(一个连字符后跟一个右尖括号)后跟返回类型的名称的方式来表示。func greet(person: String) -> String { // 函数的名字是 greet(person:) let greeting = "Hello, " + person + "!" return greeti...原创 2019-08-02 18:29:44 · 194 阅读 · 0 评论 -
Swift-基本运算符
简介Swift 支持大部分标准 C 语言的运算符,且为了减少常见编码错误做了部分改进。如:赋值符(=)不再有返回值,这样就消除了手误将判等运算符(==)写成赋值符导致代码错误的缺陷。算术运算符(+,-,*,/,% 等)的结果会被检测并禁止值溢出,以此来避免保存变量时由于变量大于或小于其类型所能承载的范围时导致的异常结果。1. 元组比较两个元组的元素相同,且长度相同的话,元组就可以被...原创 2019-07-26 14:24:48 · 160 阅读 · 0 评论 -
Swift-字符串和字符
1. 字符串在 Swift 中 String 类型是值类型。如果你创建了一个新的字符串,那么当其进行常量、变量赋值操作,或在函数/方法中传递时,会进行值拷贝。在前述任一情况下,都会对已有字符串值创建新副本,并对该新副本而非原始字符串进行传递或赋值操作1.1 初始化空字符串// 两个字符串均为空并等价。var emptyString = "" // 空字符串字面量var anoth...原创 2019-07-29 09:25:53 · 243 阅读 · 0 评论 -
Swift-闭包
闭包闭包可以捕获和存储其所在上下文中任意常量和变量的引用,被称为包裹常量和变量。Swift 会为你管理在捕获过程中涉及到的所有内存操作。全局和嵌套函数实际上也是特殊的闭包,闭包采用如下三种形式之一:全局函数是一个有名字但不会捕获任何值的闭包。嵌套函数是一个有名字并可以捕获其封闭函数域内值的闭包。闭包表达式是一个利用轻量级语法所写的可以捕获其上下文中变量或常量值的匿名闭包。Sw...原创 2019-08-05 15:04:33 · 119 阅读 · 0 评论 -
Swift-基础部分
1. 常量和变量常量的值一旦设定就不能改变,而变量的值可以随意更改。1.1 声明常量和变量常量和变量必须在使用前声明。用 let 来声明常量。用 var 来声明变量。let a = 10var b = 0// 可以在一行中声明多个常量或者多个变量,用逗号隔开:var x = 0.0, y = 0.0, z = 0.01.2 类型注解当你声明常量或者变量的时候可以加...原创 2019-07-23 14:46:22 · 247 阅读 · 0 评论 -
Swift-枚举
Swift 中的枚举,不必给每一个枚举成员提供一个值。如果给枚举成员提供一个值(称为原始值),则该值的类型可以是字符串、字符,或是一个整型值或浮点数。1. 枚举语法使用 enum 关键词来创建枚举并且把它们的整个定义放在一对大括号内:enum SomeEnumeration { // 枚举定义放在这里}使用 case 关键字来定义一个新的枚举成员值:enum Com...原创 2019-08-06 09:59:07 · 291 阅读 · 0 评论 -
Swift-继承
一个类可以继承另一个类的方法,属性和其它特性。当一个类继承其它类时,继承类叫子类,被继承类叫超类(或父类)。在 Swift 中,继承是区分「类」与其它类型的一个基本特征。在 Swift 中,类可以调用和访问超类的方法、属性和下标,并且可以重写这些方法,属性和下标来优化或修改它们的行为。Swift 会检查你的重写定义在超类中是否有匹配的定义,以此确保你的重写行为是正确的。可以为类中继承来...原创 2019-08-08 11:17:38 · 125 阅读 · 0 评论 -
Swift-构造过程
过定义构造器来实现构造过程,它就像用来创建特定类型新实例的特殊方法。Swift 的构造器没有返回值。它们的主要任务是保证某种类型的新实例在第一次使用前完成正确的初始化。1. 存储属性的初始赋值类和结构体在创建实例时,必须为所有存储型属性设置合适的初始值。存储型属性的值不能处于一个未知的状态。 注意:当你为存储型属性分配默认值或者在构造器中为设置初始值时,它们的值是被直接设置...原创 2019-08-08 17:43:42 · 128 阅读 · 0 评论 -
Swift-类和结构体
1. 结构体和类对比共同点,两者都可以:定义属性用于存储值定义方法用于提供功能定义下标操作用于通过下标语法访问它们的值定义构造器用于设置初始值通过扩展以增加默认实现之外的功能遵循协议以提供某种标准功能与结构体相比,类还有如下的附加功能:继承允许一个类继承另一个类的特征类型转换允许在运行时检查和解释一个类实例的类型析构器允许一个类实例释放任何其所被分配的资源引用计数...原创 2019-08-07 10:44:27 · 133 阅读 · 0 评论 -
Swift-析构过程
析构器只适用于类类型,当一个类的实例被释放之前,析构器会被立即调用。析构器用关键字 deinit 来标示,类似于构造器要用 init 来标示。1. 析构过程原理Swift 会自动释放不再需要的实例以释放资源。Swift 通过自动引用计数(ARC) 处理实例的内存管理。通常当你的实例被释放时不需要手动地去清理。但是,当使用自己的资源时,你可能需要进行一些额外的清理。例如,如果创建了...原创 2019-08-08 17:54:48 · 117 阅读 · 0 评论 -
Swift-自动引用计数
Swift 使用自动引用计数(ARC)机制来跟踪和管理你的应用程序的内存。通常情况下,Swift 内存管理机制会一直起作用,你无须自己来考虑内存的管理。ARC 会在类的实例不再被使用时,自动释放其占用的内存。注意:引用计数仅仅应用于类的实例。结构体和枚举类型是值类型,不是引用类型,也不是通过引用的方式存储和传递。1. 自动引用计数的工作机制当你每次创建一个类的新的实例的...原创 2019-08-13 15:23:18 · 149 阅读 · 0 评论