
《从零开始学Swift》学习笔记
一度_iOSDeveloper
做好自己,做更好的自己
展开
-
《从零开始学Swift》学习笔记(Day 50)——扩展计算属性、方法
可以在原始类型上扩展计算属性,包括实例计算属性和静态计算属性。添加计算属性的定义,与普通的计算属性的定义是一样的。实例计算属性示例:在网络编程时,为了减少流量,从服务器端返回的不是信息描述,而是编码,然后在本地再将编码转换为描述信息。为此定义了如下Int类型扩展:extension Int { //定义Int类型的扩展 var errorMessage : String { //转载 2016-12-21 10:09:29 · 361 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 57)——Swift编码规范之注释规范:文件注释、文档注释、代码注释、使用地标注释
前面说到Swift注释的语法有两种:单行注释(//)和多行注释(/*...*/)。这里来介绍一下他们的使用规范。1、文件注释就在每一个文件开头添加注释,文件注释通常包括如下信息:版权信息、文件名、所在模块、作者信息、历史版本信息、文件内容和作用等。下面看一个文件注释的示例:/*Copyright (C) 2015 Eorient Inc. All Rights Reserved转载 2016-12-23 15:13:31 · 350 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 56)——Swift编码规范之命名规范
程序代码中到处都是自己定义的名字,取一个有样并且符合规范的名字非常重要。命名方法很多,但是比较有名的,广泛接受命名法有: 匈牙利命名,一般只是命名变量,原则是:变量名=类型前缀+描述,如bFoo表示布尔类型变量,pFoo表示指针类型变量。匈牙利命名还是有一定争议的,在Swift编码规范中几本不采用匈牙利命名。 驼峰命名(Camel-Case),又称骆驼命名法,是指混合使用大小写字母转载 2016-12-23 15:09:59 · 330 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 55)——使用try?和try!区别
在使用try进行错误处理的时候,经常会看到try后面跟有问号(?)或感叹号(!),他们有什么区别呢?1.使用try? try?会将错误转换为可选值,当调用try?+函数或方法语句时候,如果函数或方法抛出错误,程序不会发崩溃,而返回一个nil,如果没有抛出错误则返回可选值。示例代码如下://查询所有数据方法func findAll() throws -> [Note] {转载 2016-12-23 14:35:00 · 329 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day54)——抛出错误
能放到try后面调用函数或方法都是有要求的,他们是有可能抛出错误,在这些函数或方法声明的参数后面要加上throws关键字,表示这个函数或方法可以抛出错误。声明抛出错误方法示例代码如下://删除Note记录方法func remove(model: Note) throws { ...}//查询所有记录数据方法func findAll() throws ->转载 2016-12-23 11:53:31 · 333 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 53)——do-try-catch错误处理模式
Swift 1.x的错误处理模式存在很多弊端,例如:为了在编程时候省事,给error参数传递一个nil,或者方法调用完成后不去判断error是否为nil,不进行错误处理。let contents = NSString(contentsOfFile: filePath, encoding: NSUTF8StringEncod转载 2016-12-21 14:15:38 · 490 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 52)——Cocoa错误处理模式
Swift错误处理模式,在Swift 1.x和Swift 2.0是不同的两种模式。Swift 1.x代码错误处理模式采用Cocoa框架错误处理模式,到现在Objective-C还沿用这种处理模式,而Swift 2.0之后采用了do-try-catch错误处理模式。下面的示例代码是从文件中读取字符串到内存中,如果使用Swift 1.x错误处理模式代码如下:import Foundat转载 2016-12-21 13:09:57 · 335 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 51)——扩展构造函数
扩展类型的时候,也可以添加新的构造函数。值类型与引用类型扩展有所区别。值类型包括了除类以外的其他类型,主要是枚举类型和结构体类型。值类型扩展构造函数扩展结构体类型中定义构造函数的示例:struct Rectangle { var width : Double var height : Double init(width : Do转载 2016-12-21 11:31:42 · 444 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 35)——会使用下标吗?
看下面的示例代码是不是使用过:var studentList: String[] = ["张三","李四","王五"]studentList[0] = "诸葛亮"var studentDictionary = [102: "张三",105: "李四", 109: "王五"]studentDictionary[110] = "董六"在访问数组和字典的时候,可以采用下标访问。其中数转载 2016-10-08 17:24:32 · 352 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 34)——静态属性是怎么回事?
我先来设计一个类:有一个Account(银行账户)类,假设它有3个属性:amount(账户金额)、interestRate(利率)和owner(账户名)。在这3个属性中,amount和owner会因人而异,不同的账户这些内容是不同的,而所有账户的interestRate都是相同的。amount和owner属性与账户个体有关,称为实例属性。interestRate属性与个体无关,或者说是所有转载 2016-10-08 11:14:11 · 362 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 33)——属性观察者
为了监听属性的变化,Swift提供了属性观察者。属性观察者能够监听存储属性的变化,即便变化前后的值相同,它们也能监听到。属性观察者主要有以下两个: willSet:观察者在修改之前调用。 didSet:观察者在修改之后立刻调用。属性观察者的语法格式如下:面向对象类型 类型名 { ... var 存储属性: 属性数据类型 = 初始化值 { w转载 2016-10-08 10:07:35 · 271 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 32)——计算属性
计算属性本身不存储数据,而是从其他存储属性中计算得到数据。计算属性概念:计算属性提供了一个getter(取值访问器)来获取值,以及一个可选的setter(设置访问器)来间接设置其他属性或变量的值。计算属性的语法格式如下:面向对象类型 类型名 { 存储属性 ...... var 计算属性名: 属性数据类型 { get {转载 2016-10-08 09:28:48 · 272 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 31)——存储属性
Swift中的属性分为存储属性和计算属性,存储属性就是Objective-C中的数据成员,计算属性不存储数据,但可以通过计算其他属性返回数据。存储属性可以存储数据,分为常量属性(用关键字let定义)和变量属性(用关键字var定义)。存储属性概念:我们在前面曾用到过属性,Employee类和Department结构体。它们的类图如下,Employee 的部门属性dept与Departme转载 2016-09-30 16:46:21 · 374 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 30)——选择类还是结构体呢?
类和结构体非常相似,很多情况下没有区别。如果你是设计人员在进行系统设计时候,是将某种类型设计成为类还是结构体?类和结构体异同:类和结构体都有如下功能: 定义存储属性 定义方法 定义下标 定义构造函数 定义扩展 实现协议只有类才有的功能: 能够继承另外一个类 能够核对运行期对象的类型 析构对象释放资源 引用计数允许一个实例有多个转载 2016-09-30 10:52:55 · 324 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 29)——访问级别
访问级别:Swift提供了3种不同访问级别,对应的访问修饰符为:public、internal和private。这些访问修饰符可以修饰类、结构体、枚举等面向对象的类型,还可以修饰变量、常量、下标、元组、函数、属性等内容。 public。可以访问自己模块中的任何public实体。如果使用import语句引入其他模块,我们可以访问其他模块中的public实体。 internal。只能访转载 2016-09-30 10:37:31 · 273 阅读 · 0 评论 -
《从零开始学Swift》学习笔记 (Day 58)—— Swift编码规范之变量或常量声明规范
声明是在声明变量、常量、属性、方法或函数和自定义类型时候需要遵守的规范。首先变量或常量时每行声明变量或常量的数量推荐一行一个,因为这样以利于写注释。示例代码如下。推荐使用:let level = 0var size = 10不推荐使用:let level = 0; var size = 10变量或常量的数据类型,如果有可能应尽可能采用类型推断,这样代码很简洁。示例代码如转载 2016-12-23 17:23:07 · 366 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 42)——构造函数调用规则
在构造函数中可以使用构造函数代理帮助完成部分构造工作。类构造函数代理分为横向代理和向上代理,横向代理只能在发生在同一类内部,这种构造函数称为便利构造函数。向上代理发生在继承的情况下,在子类构造过程中,要先调用父类构造函数初始化父类的存储属性,这种构造函数称为指定构造函数。构造函数调用规则Person和Student类示例:class Person { var name:转载 2016-12-19 10:30:52 · 436 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day43)——构造函数继承
Swift中的子类构造函数的来源有两种:自己编写和从父类继承。并不是父类的所有的构造函数都能继承下来,能够从父类继承下来的构造函数是有条件的,如下所示。 条件1:如果子类没有定义任何指定构造函数,它将自动继承所有父类的指定构造函数。 条件2:如果子类提供了所有父类指定构造函数的实现,无论是通过条件1继承过来的,还是通过自己编写实现的,它都将自动继承所有父类的便利构造函数。下面看转载 2016-12-19 11:34:11 · 347 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 49)——扩展声明
extension 类型名 { //添加新功能}声明扩展的关键字是extension,“类型名”是Swift中已有的类型,包括类、结构体和枚举,但是我们仍然可以扩展整型、浮点型、布尔型、字符串等基本数据类型,这是因为这些类型本质上也是结构体类型。打开Int的定义如下:struct Int : SignedInteger { init() init(_转载 2016-12-21 09:46:51 · 290 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day48)——类型检查与转换
继承会发生在子类和父类之间,是一系列类的继承关系。例如:Person是类层次结构中的根类,Student是Person的直接子类,Worker是Person的直接子类。这个继承关系类的具体实现代码如下:class Person { var name: String var age: Int func description() -> Strin转载 2016-12-20 15:32:06 · 378 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 47)——final关键字
在类的定义中使用final关键字声明类、属性、方法和下标。final声明的类不能被继承,final声明的属性、方法和下标不能被重写。下面看一个示例: final class Person { //声明为final,说明它是不能被继承的 var name: String final var age: Int //定义的age属性转载 2016-12-20 15:20:52 · 396 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 46)——下标重写
下标是一种特殊属性。子类属性重写是重写属性的getter和setter访问器,对下标的重写也是重写下标的getter和setter访问器。下面看一个示例:class DoubleDimensionalArray { let rows: Int, columns: Int var grid: [Int] init(rows: Int, columns:转载 2016-12-20 14:53:48 · 299 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 45)——重写方法
重写实例方法在子类中重写从父类继承来的实例方法和静态方法。先介绍实例方法的重写。下面看一个示例:class Person { var name: String var age: Int func description() -> String { //实例方法 return "\(name) 年龄是: \(age)" }转载 2016-12-20 13:35:57 · 477 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day67)——Cocoa Touch设计模式及应用之MVC模式
MVC(Model-View-Controller,模型-视图-控制器)模式是相当古老的设计模式之一,它最早出现在Smalltalk语言中。现在,很多计算机语言和架构都采用了MVC模式。MVC模式概述MVC模式是一种复合设计模式,由 “观察者”(Observer)模式、“策略”(Strategy)模式和“合成”(Composite)模式等组成。MVC模式由3个部分组成,如图所示,这3个部分转载 2016-12-27 13:16:17 · 654 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 66)——Cocoa Touch设计模式及应用之通知机制
通知(Notification)机制是基于观察者(Observer)模式也叫发布/订阅(Publish/Subscribe)模式,是 MVC( 模型-视图-控制器)模式的重要组成部分。问题提出天气一直是英国人喜欢讨论的话题,而最近几年天气的变化也成为中国人非常关注的话题。我会根据天气预报决定是坐地铁还是开车上班,我的女儿也会根据天气预报决定明天穿哪件衣服。于是我在移动公司为我的手机定制转载 2016-12-27 11:05:44 · 374 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 65)——Cocoa Touch设计模式及应用之选择器
实现目标与动作关联使用UIControl类addTarget(_:action:forControlEvents:)方法,示例代码如下:button.addTarget(self, action: "onClick:", forControlEvents: UIControlEvents.T转载 2016-12-27 10:05:36 · 334 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 64)——Cocoa Touch设计模式及应用之目标与动作
目标(Target)与动作(Action)是iOS和OS X应用开发的中事件处理机制。问题提出如图所示是一个ButtonLabelSample案例设计原型图,其中包含一个标签和一个按钮,当点击按钮的时候,标签文本会从初始的Label替换为HelloWorld。 ButtonLabelSample案例首先要解决的问题是转载 2016-12-27 09:51:12 · 320 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 62)——Core Foundation框架之内存托管对象与非托管对象
内存托管对象Swift中调用Core Foundation函数获得对象时候,对象分为:内存托管对象和内存非托管对象。内存托管对象就是由编译器帮助管理内存,我们不需要调用CFRetain函数获得对象所有权,也不需要调用CFRelease函数放弃对象所有权。获得这些内存托管对象的方法,是采用了CF_RETURNS_RETAINED或CF_RETURNS_NOT_RETAINED注释声明,示转载 2016-12-27 09:40:17 · 398 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 61)——Core Foundation框架之内存管理
在Swift原生数据类型、Foundation框架数据类型和Core Foundation框架数据类型之间转换过程中,虽然是大部分是可以零开销桥接,零开销并不意味着内存什么都不用管。Swift类型内存管理是采用ARC,Foundation类型和Core Foundation类型内存管理都是采用MRC或ARC,Core Foundation类型内存管理是基于C语言风格的,它有一个对象所有权的概念。转载 2016-12-26 14:55:55 · 341 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day60)——Core Foundation框架
Core Foundation框架是苹果公司提供一套概念来源于Foundation框架,编程接口面向C语言风格的API。虽然在Swift中调用这种C语言风格的API比较麻烦,但是在OS X和iOS开发过程中,有时候使用Core Foundation框架的API是非常方便的,例如在与C语言混合编码的时候。Core Foundation框架与Foundation框架紧密相关,他们具有与相同的接口,转载 2016-12-26 14:30:05 · 442 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 59)——代码排版
代码排版包括: 空行、空格、断行和缩进等内容。代码排版内容比较多工作量很多,但是非常重要。空行空行将逻辑相关的代码段分隔开,以提高可读性。下列情况应该总是添加空行: 类型声明之前。 import语句前后。 两个方法或函数之间。 块注释或单行注释之前。 方法或函数内的两个逻辑段之间,用以提高可读性。 一个源文件的两个片段之间。空格在代码中有些位转载 2016-12-26 14:05:59 · 400 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 44)——重写属性
重写实例属性我们可以在子类中重写从父类继承来的属性,属性有实例属性和静态属性之分,他们在具体实现也是不同的。实例属性的重写一方面可以重写getter和setter访问器,另一方面可以重写属性观察者。计算静态属性需要使用getter和setter访问器,而存储属性不需要。子类在继承父类后,也可以通过getter和setter访问器重写父类的存储属性和计算属性。下面看一个示例:cl转载 2016-12-19 14:16:33 · 304 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 28)——总结使用问号(?)和感叹号...
在使用可选类型和可选链时,多次使用了问号(?)和感叹号(!),但是它们的含义是不同的,下面我来详细说明一下。1. 可选类型中的问号(?)声明这个类型是可选类型,访问这种类型的变量或常量时要使用感叹号(!),下列代码是显示拆包:let result1: Double? = divide(100, 200)print(result1!)2. 可选类型中的感叹号(!)转载 2016-09-29 17:26:46 · 360 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 27)——可选类型
可选类型:我们先看看如下代码:var n1: Int = 10n1 = nil //编译错误let str: String = nil //编译错误Int和String类型不能接受nil的,但程序运行过程中有时被复制给nil是在所难免的,Swift为每一种数据类型提供一种可选类型(optional),即在某个数据类型后面加上问号(?)或感叹号(!),修改前文示例代码:v转载 2016-09-29 17:24:52 · 353 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 11)——数据类型那些事儿?
在我们学习语言时都会学到这种语言的数据类型,在Swift中数据类型有那些呢?整型、浮点型、布尔型、字符、字符串这些类型是一定有的,其中集合、枚举、结构体、类也是Swift中的数据类型。元组是Swift中特有的。 其他那些类型我们可能多少知道些或是听说过。元组是在Swift中有的,它是什么呢? 它是一种数据结构,在数学中应用广泛。在计算机科学中,元组是关系数据库中的基本转载 2016-08-23 16:52:01 · 255 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 10)——运算符是“ +、-、*、/ ”吗?
运算符是用于执行程序代码运算,会针对一个或一个以上操作数项目来进行运算。例如:2+3,其操作数是2和3,而运算符则是“+”。那么“+、-、*、/”是运算符。 运算符有哪几种呢? 在Swift语言中主要的运算符包括算术、关系、逻辑、位运算符等。“ +、-、*、/ ”是算术运算符中的二元运算符,一元运算符是是-、++和--。 二元运算符:转载 2016-08-23 16:50:33 · 326 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 9)——离开表达式你试试!
表达式啊是很重要地。在Swift中,表达式有3种形式。 不指定数据类型var a1 = 10 指定数据类型var a1:Int = 10 使用分号var a1:Int = 10; var a2:Int = 20在Swift语言中,一条语句结束后可以不加分号也可以添加分号,但是有一种情况必须要用分号,那就是多条语句写在一行的时候,需要通过分号来区别语句。例如转载 2016-08-23 16:48:50 · 275 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 8)——小小常量、变量大作用
计算机语言学习中都有常量和变量,他们几乎是我编写代码的灵魂了,离开他们我真的是“活不了”常量是标识符的前面加上关键字let。常量其值在使用过程中不会发生变化的量,下面是声明常量:let _Hello = "Hello"注意哦常量只能在初始化的时候被赋值,如果再次给_Hello赋值,比如: _Hello = "Hello, World"程序会报错的变量来了转载 2016-08-23 16:47:37 · 321 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 7)——Swift 2.0中的print函数几种...
Swift 2.0中的print函数有4种重载形式: print(_:)。输出变量或常量到控制台,并且换行。 print(_:_:)。输出变量或常量到指定类型的流中,并且换行。 print(_:appendNewline:)。输出变量或常量到控制台,appendNewline参数是布尔值,true表示换行,false表示不换行。 print(_:_:appendNewlin转载 2016-08-23 16:46:12 · 495 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 6)——哎呀常量和变量都该什么时候...
原创文章,欢迎转载。转载请注明:关东升的博客使用var还是let?在我们开发过程中啊什么时候定义关键字为var,还是定义为let呢?其实啊都能满足我们的需求,那我们到底应该如何选择?例如:可以将圆周率π定义为let或var。let π = 3.14159var π = 3.14159上面代码编译不会报错。但是从业务逻辑层面讲,π应该定义为常量(let)的,因为一转载 2016-08-23 16:44:38 · 395 阅读 · 0 评论