
从零开始学Swift
码农老关【关东升】
关东升,国内著名技术专家,架构师,项目经理、技术顾问,技术图书作家,51CTO学院金牌讲师。
擅长技术:
移动开发、前后端技术、游戏开发、数据库开发与设计、软件架构设计等多种IT技术。
20多年教学经验:
教授近万名学员,近期为中国移动、中国联通、南方航空、中石油、工商银行、平安银行和天津港务局等企事业单位授课。
著有50本多部畅销书:
《看漫画学Python》
《看漫画学Python2》
《极简ChatGPT: 如何利用AI提高办公效率》
《极简ChatGPT:如何利用AI实现Python自动编程》
《AI时代程序员开发之道:ChatGPT让程序员插上翅膀》
展开
-
《从零开始学Swift》学习笔记(Day 63)——Cocoa Touch设计模式及应用之单例模式
原创文章,欢迎转载。转载请注明:关东升的博客 什么是设计模式。设计模式是在特定场景下对特定问题的解决方案,这些解决方案是经过反复论证和测试总结出来的。实际上,除了软件设计,设计模式也被广泛应用于其他领域,比如UI设计和建筑设计等。下面来介绍Cocoa Touch框架中的设计模式中的单例模式。 单例模式单例模式的作用是解决“应用中只有一个实例”的一类问题。在Cocoa Touch框架中,有UIAp原创 2016-03-22 13:21:45 · 3761 阅读 · 0 评论 -
关东升的《从零开始学Swift》3月9日已经上架
大家一直期盼的《从零开始学Swift》于3月9日已经上架,它是关东升老师历时8个月的呕心沥血所编著,全书600多页,此本书基于Swift 2.x,通过大量案例全面介绍苹果平台的应用开发。全书共分5 部分,包括Swift语法篇、Cocoa Touch框架编程篇、混合编程篇、进阶篇和项目实战篇,囊括了开发工具介绍、语言基础知识,直至应用在App Store上线的所有内容。此外,本书前20 章专门配有同原创 2016-03-11 10:55:04 · 5825 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 71)——Swift与C/C++混合编程之数据类型映射
原创文章,欢迎转载。转载请注明:关东升的博客 如果引入必要的头文件,在Objective-C语言中可以使用C数据类型。而在Swift语言中是不能直接使用C数据类型,苹果公司为Swift语言提供与C语言相对应数据类型。这些类型主要包括:C语言基本数据类型和指针类型。 C语言基本数据类型如表所述是Swift数据类型与C语言基本数据类型对应关系表。 Swift语言中的这些数据类型与Swift原生的原创 2016-03-02 13:41:39 · 3662 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 70)——Swift与Objective-C混合编程之Swift与Objective-C API映射
原创文章,欢迎转载。转载请注明:关东升的博客 Swift与Objective-C API映射在混合编程过程中Swift与Objective-C调用是双向的,由于不同语言对于相同API的表述是不同的,他们之间是有某种映射规律的,这种API映射规律主要体现在构造函数和方法两个方面。 1、构造函数映射在Swift与Objective-C语言进行混合编程时,首先涉及到调用构造函数实例化对象问题,不同语原创 2016-02-26 10:00:20 · 2782 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 69)——Swift与Objective-C混合编程之语言
原创文章,欢迎转载。转载请注明:关东升的博客 在Swift语言出现之前,开发iOS或OS X应用主要使用Objective-C语言,此外还可以使用C和C++语言,但是UI部分只能使用Objective-C语言。 选择语言Swift语言出现后,苹果公司给程序员提供了更多的选择,让这两种语言并存。既然是并存,我们就有4种方式可以选择:采用纯Swift的改革派方式;采用纯Objective-C的保守派原创 2016-02-24 10:16:07 · 2939 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 68)——Cocoa Touch设计模式及应用之响应者链与触摸事件
原创文章,欢迎转载。转载请注明:关东升的博客 应用与用户进行交互,依赖于各种各样的事件。事件响应者对象是可以响应事件并对其进行处理的对象,响应者链是由一系列链接在一起的响应者组成的。响应者链在事件处理中是非常重要的,响应者链可以把用户事件路由给正确的对象。 响应者对象与响应链UIResponder是所有响应者对象的基类,它不仅为事件处理,而且也为常见的响应者行为定义编程接口。UIApplicat原创 2016-02-19 10:20:41 · 2099 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day67)——Cocoa Touch设计模式及应用之MVC模式
原创文章,欢迎转载。转载请注明:关东升的博客 MVC(Model-View-Controller,模型-视图-控制器)模式是相当古老的设计模式之一,它最早出现在Smalltalk语言中。现在,很多计算机语言和架构都采用了MVC模式。 MVC模式概述MVC模式是一种复合设计模式,由 “观察者”(Observer)模式、“策略”(Strategy)模式和“合成”(Composite)模式等组成。原创 2016-02-17 10:04:09 · 2673 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 66)——Cocoa Touch设计模式及应用之通知机制
原创文章,欢迎转载。转载请注明:关东升的博客 通知(Notification)机制是基于观察者(Observer)模式也叫发布/订阅(Publish/Subscribe)模式,是 MVC( 模型-视图-控制器)模式的重要组成部分。 问题提出天气一直是英国人喜欢讨论的话题,而最近几年天气的变化也成为中国人非常关注的话题。我会根据天气预报决定是坐地铁还是开车上班,我的女儿也会根据天气预报决定明天穿原创 2016-01-28 17:31:53 · 2443 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 65)——Cocoa Touch设计模式及应用之选择器
原创文章,欢迎转载。转载请注明:关东升的博客 实现目标与动作关联使用UIControl类addTarget(_:action:forControlEvents:)方法,示例代码如下:button.addTarget(self, action: "onClick:", ÊforControlEvents: UIControlEvents.TouchUpInside原创 2016-01-27 12:47:01 · 2591 阅读 · 1 评论 -
《从零开始学Swift》学习笔记(Day 64)——Cocoa Touch设计模式及应用之目标与动作
原创文章,欢迎转载。转载请注明:关东升的博客 目标(Target)与动作(Action)是iOS和OS X应用开发的中事件处理机制。 问题提出如图所示是一个ButtonLabelSample案例设计原型图,其中包含一个标签和一个按钮,当点击按钮的时候,标签文本会从初始的Label替换为HelloWorld。 ButtonLabelSample案例首先要解决的问题是:按钮点击事件后有谁负责响应事件原创 2016-01-25 15:14:55 · 3079 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 62)——Core Foundation框架之内存托管对象与非托管对象
原创文章,欢迎转载。转载请注明:关东升的博客 内存托管对象Swift中调用CoreFoundation函数获得对象时候,对象分为:内存托管对象和内存非托管对象。内存托管对象就是由编译器帮助管理内存,我们不需要调用CFRetain函数获得对象所有权,也不需要调用CFRelease函数放弃对象所有权。获得这些内存托管对象的方法,是采用了CF_RETURNS_RETAINED或CF_RETURNS_N原创 2016-01-20 10:19:59 · 2870 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 61)——Core Foundation框架之内存管理
原创文章,欢迎转载。转载请注明:关东升的博客 在Swift原生数据类型、Foundation框架数据类型和Core Foundation框架数据类型之间转换过程中,虽然是大部分是可以零开销桥接,零开销并不意味着内存什么都不用管。Swift类型内存管理是采用ARC,Foundation类型和Core Foundation类型内存管理都是采用MRC或ARC,CoreFoundation类型内存管理是基原创 2016-01-18 10:16:36 · 2241 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day60)——Core Foundation框架
创文章,欢迎转载。转载请注明:关东升的博客 Core Foundation框架是苹果公司提供一套概念来源于Foundation框架,编程接口面向C语言风格的API。虽然在Swift中调用这种C语言风格的API比较麻烦,但是在OS X和iOS开发过程中,有时候使用CoreFoundation框架的API是非常方便的,例如在与C语言混合编码的时候。Core Foundation框架与Foundati原创 2016-01-15 10:41:53 · 2921 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 59)——代码排版
原创文章,欢迎转载。转载请注明:关东升的博客 代码排版包括: 空行、空格、断行和缩进等内容。代码排版内容比较多工作量很多,但是非常重要。空行空行将逻辑相关的代码段分隔开,以提高可读性。下列情况应该总是添加空行:类型声明之前。import语句前后。两个方法或函数之间。块注释或单行注释之前。方法或函数内的两个逻辑段之间,用以提高可读性。一个源文件的两个片段之间。空格在代码中有些位置是需要有空格的,这个原创 2016-01-15 10:38:46 · 1895 阅读 · 0 评论 -
《从零开始学Swift》学习笔记 (Day 58)—— Swift编码规范之变量或常量声明规范
原创文章,欢迎转载。转载请注明:关东升的博客 声明是在声明变量、常量、属性、方法或函数和自定义类型时候需要遵守的规范。首先变量或常量时每行声明变量或常量的数量推荐一行一个,因为这样以利于写注释。示例代码如下。推荐使用:let level = 0var size = 10不推荐使用:let level = 0; var size = 10变量或常量的数据类型,如果有可能应尽可能采用类型推原创 2016-01-11 14:06:55 · 2241 阅读 · 1 评论 -
《从零开始学Swift》学习笔记(Day 57)——Swift编码规范之注释规范:文件注释、文档注释、代码注释、使用地标注释
原创文章,欢迎转载。转载请注明:关东升的博客 前面说到Swift注释的语法有两种:单行注释(//)和多行注释(/*...*/)。这里来介绍一下他们的使用规范。 文件注释文件注释就在每一个文件开头添加注释,文件注释通常包括如下信息:版权信息、文件名、所在模块、作者信息、历史版本信息、文件内容和作用等。下面看一个文件注释的示例:/*Copyright (C) 2015 Eorient Inc.原创 2016-01-08 10:14:17 · 4311 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 56)—— Swift编码规范之命名规范
原创文章,欢迎转载。转载请注明:关东升的博客 程序代码中到处都是自己定义的名字,取一个有样并且符合规范的名字非常重要。命名方法很多,但是比较有名的,广泛接受命名法有:匈牙利命名,一般只是命名变量,原则是:变量名=类型前缀+描述,如bFoo表示布尔类型变量,pFoo表示指针类型变量。匈牙利命名还是有一定争议的,在Swift编码规范中几本不采用匈牙利命名。驼峰命名(Camel-Case),又称骆驼命原创 2016-01-06 12:28:12 · 2243 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 55)——使用try?和try!区别
原创文章,欢迎转载。转载请注明:关东升的博客 在使用try进行错误处理的时候,经常会看到try后面跟有问号(?)或感叹号(!),他们有什么区别呢?1.使用try? try?会将错误转换为可选值,当调用try?+函数或方法语句时候,如果函数或方法抛出错误,程序不会发崩溃,而返回一个nil,如果没有抛出错误则返回可选值。示例代码如下://查询所有数据方法func findAll() throws原创 2016-01-04 13:54:21 · 4594 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day54)——抛出错误
原创文章,欢迎转载。转载请注明:关东升的博客 能放到try后面调用函数或方法都是有要求的,他们是有可能抛出错误,在这些函数或方法声明的参数后面要加上throws关键字,表示这个函数或方法可以抛出错误。声明抛出错误方法示例代码如下://删除Note记录方法func remove(model: Note) throws { ...}//查询所有记录数据方法func findAl原创 2015-12-30 10:36:23 · 2096 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 53)——do-try-catch错误处理模式
原创文章,欢迎转载。转载请注明:关东升的博客 Swift 1.x的错误处理模式存在很多弊端,例如:为了在编程时候省事,给error参数传递一个nil,或者方法调用完成后不去判断error是否为nil,不进行错误处理。let contents = NSString(contentsOfFile: filePath, Êencoding: NSUTF8StringEncodi原创 2015-12-28 09:25:39 · 5543 阅读 · 1 评论 -
《从零开始学Swift》学习笔记(Day 52)——Cocoa错误处理模式
原创文章,欢迎转载。转载请注明:关东升的博客 Swift错误处理模式,在Swift1.x和Swift 2.0是不同的两种模式。Swift 1.x代码错误处理模式采用Cocoa框架错误处理模式,到现在Objective-C还沿用这种处理模式,而Swift2.0之后采用了do-try-catch错误处理模式。下面的示例代码是从文件中读取字符串到内存中,如果使用Swift 1.x错误处理模式代码如下:原创 2015-12-25 10:44:40 · 2128 阅读 · 1 评论 -
《从零开始学Swift》学习笔记(Day 51)——扩展构造函数
创文章,欢迎转载。转载请注明:关东升的博客 扩展类型的时候,也可以添加新的构造函数。值类型与引用类型扩展有所区别。值类型包括了除类以外的其他类型,主要是枚举类型和结构体类型。 值类型扩展构造函数扩展结构体类型中定义构造函数的示例:struct Rectangle { var width : Double var height : Double原创 2015-12-23 10:08:06 · 2061 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 50)——扩展计算属性、方法
原创文章,欢迎转载。转载请注明:关东升的博客 可以在原始类型上扩展计算属性,包括实例计算属性和静态计算属性。添加计算属性的定义,与普通的计算属性的定义是一样的。实例计算属性示例:在网络编程时,为了减少流量,从服务器端返回的不是信息描述,而是编码,然后在本地再将编码转换为描述信息。为此定义了如下Int类型扩展:extension Int { //定义Int类型的扩展原创 2015-12-21 11:08:17 · 2186 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 49)——扩展声明
原创文章,欢迎转载。转载请注明:关东升的博客 声明扩展的语法格式如下:extension 类型名 { //添加新功能}声明扩展的关键字是extension,“类型名”是Swift中已有的类型,包括类、结构体和枚举,但是我们仍然可以扩展整型、浮点型、布尔型、字符串等基本数据类型,这是因为这些类型本质上也是结构体类型。打开Int的定义如下:struct Int : SignedInt原创 2015-12-16 15:33:22 · 2297 阅读 · 1 评论 -
《从零开始学Swift》学习笔记(Day48)——类型检查与转换
原创文章,欢迎转载。转载请注明:关东升的博客 继承会发生在子类和父类之间,是一系列类的继承关系。例如:Person是类层次结构中的根类,Student是Person的直接子类,Worker是Person的直接子类。这个继承关系类的具体实现代码如下:class Person { var name: String var age: Int func desc原创 2015-12-14 10:47:39 · 2132 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 47)——final关键字
原创文章,欢迎转载。转载请注明:关东升的博客 在类的定义中使用final关键字声明类、属性、方法和下标。final声明的类不能被继承,final声明的属性、方法和下标不能被重写。下面看一个示例:final class Person { //声明为final,说明它是不能被继承的 var name: String final var age: Int //原创 2015-12-11 10:14:07 · 1968 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 46)——下标重写
原创文章,欢迎转载。转载请注明:关东升的博客 下标是一种特殊属性。子类属性重写是重写属性的getter和setter访问器,对下标的重写也是重写下标的getter和setter访问器。下面看一个示例:class DoubleDimensionalArray { let rows: Int, columns: Int var grid: [Int] init(row原创 2015-12-09 10:23:00 · 2290 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 45)——重写方法
原创文章,欢迎转载。转载请注明:关东升的博客 重写实例方法在子类中重写从父类继承来的实例方法和静态方法。先介绍实例方法的重写。下面看一个示例:class Person { var name: String var age: Int func description() -> String { //实例方法 retu原创 2015-12-07 09:55:58 · 2045 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 44)——重写属性
原创文章,欢迎转载。转载请注明:关东升的博客 重写实例属性我们可以在子类中重写从父类继承来的属性,属性有实例属性和静态属性之分,他们在具体实现也是不同的。实例属性的重写一方面可以重写getter和setter访问器,另一方面可以重写属性观察者。计算静态属性需要使用getter和setter访问器,而存储属性不需要。子类在继承父类后,也可以通过getter和setter访问器重写父类的存储属性和计算原创 2015-12-04 13:14:01 · 2618 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day43)——构造函数继承
原创文章,欢迎转载。转载请注明:关东升的博客 Swift中的子类构造函数的来源有两种:自己编写和从父类继承。并不是父类的所有的构造函数都能继承下来,能够从父类继承下来的构造函数是有条件的,如下所示。条件1:如果子类没有定义任何指定构造函数,它将自动继承所有父类的指定构造函数。条件2:如果子类提供了所有父类指定构造函数的实现,无论是通过条件1继承过来的,还是通过自己编写实现的,它都将自动继承所有父类原创 2015-12-02 11:56:27 · 1945 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 42)——构造函数调用规则
原创文章,欢迎转载。转载请注明:关东升的博客 在构造函数中可以使用构造函数代理帮助完成部分构造工作。类构造函数代理分为横向代理和向上代理,横向代理只能在发生在同一类内部,这种构造函数称为便利构造函数。向上代理发生在继承的情况下,在子类构造过程中,要先调用父类构造函数初始化父类的存储属性,这种构造函数称为指定构造函数。 构造函数调用规则Person和Student类示例:class Perso原创 2015-11-30 10:10:30 · 2188 阅读 · 2 评论 -
《从零开始学Swift》学习笔记(Day 41)——类的继承
原创文章,欢迎转载。转载请注明:关东升的博客 Swift中的继承只能发生在类上,不能发生在枚举和结构体上。一个类可以继承另一个类的方法、属性、下标等特征,当一个类继承其他类时,继承类叫子类,被继承类叫父类(或超类)。子类继承父类后,可以重写父类的方法、属性、下标等特征。 为了了解继承性,看这样一个场景:一位面向对象的程序员小赵,在编程过程中需要描述和处理个人信息,于是他定义了类Person,如下原创 2015-11-27 11:57:33 · 2829 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 40)——析构函数
原创文章,欢迎转载。转载请注明:关东升的博客 与构造过程相反,实例最后释放的时候,需要清除一些资源,这个过程就是析构过程。在析构过程中也会调用一种特殊的方法deinit,称为析构函数。析构函数deinit没有返回值,也没有参数,也不需要参数的小括号,所以不能重载。 下面看看示例代码:class Rectangle { var width: Double var he原创 2015-11-25 10:28:23 · 2286 阅读 · 1 评论 -
《从零开始学Swift》学习笔记(Day 39)——构造函数重载
原创文章,欢迎转载。转载请注明:关东升的博客 构造函数作为一种特殊方法,也可以重载。Swift中构造函数可以多个,他们参数列表和返回值可以不同,这些构造函数构成重载。示例代码如下:class Rectangle { var width: Double var height: Double init(width: Double, height:原创 2015-11-23 10:32:53 · 2450 阅读 · 0 评论 -
《从零开始学Swift》Swift 2.0学习笔记(Day 38)——构造函数与存储属性初始化
原创文章,欢迎转载。转载请注明:关东升的博客 构造函数的主要作用是初始化实例,其中包括:初始化存储属性和其它的初始化。在Rectangle类或结构体中,如果在构造函数中初始化存储属性width和height后,那么在定义他们时就不需要初始化了。Rectangle类代码如下:class Rectangle { var width: Double var height: Doub原创 2015-11-23 10:30:18 · 2176 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 37)——默认构造函数
Swift 2.0学习笔记(Day 37)——默认构造函数原创文章,欢迎转载。转载请注明:关东升的博客 结构体和类的实例在构造过程中会调用一种特殊的init方法,称为构造函数。构造函数没有返回值,可以重载。在多个构造函数重载的情况下,运行环境可以根据它的外部参数名或参数列表调用合适的构造函数。默认构造函数结构体和类在构造过程中会调用一个构造函数,即便是没有编写任何构造函数,编译器也会提供一个默认的原创 2015-11-18 11:30:43 · 2281 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 36)——静态方法
原创文章,欢迎转载。转载请注明:关东升的博客静态方法与静态属性类似,Swift中定义了静态方法,也称为类型方法。静态方法的定义与静态属性类似,枚举和结构体的静态方法使用的关键字是static;类静态方法使用的关键字是class或static,如果使用static定义,则该方法不能在子类中被重写(override);如果使用class定义,则该方法可以被子类重写。 结构体静态方法看一个结构体静态方法原创 2015-11-16 12:33:41 · 2801 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 35)——会使用下标吗?
原创文章,欢迎转载。转载请注明:关东升的博客看下面的示例代码是不是使用过:var studentList: String[] = ["张三","李四","王五"]studentList[0] = "诸葛亮" var studentDictionary = [102: "张三",105: "李四", 109: "王五"]studentDictionary[110] = "董六"原创 2015-11-13 10:03:56 · 2275 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 34)——静态属性是怎么回事?
Swift 2.0学习笔记(Day 34)——静态属性是怎么回事?原创文章,欢迎转载。转载请注明:关东升的博客我先来设计一个类:有一个Account(银行账户)类,假设它有3个属性:amount(账户金额)、interestRate(利率)和owner(账户名)。在这3个属性中,amount和owner会因人而异,不同的账户这些内容是不同的,而所有账户的interestRate都是相同的。amou原创 2015-11-11 11:52:17 · 2050 阅读 · 0 评论 -
《从零开始学Swift》学习笔记(Day 33)——属性观察者
原创文章,欢迎转载。转载请注明:关东升的博客 为了监听属性的变化,Swift提供了属性观察者。属性观察者能够监听存储属性的变化,即便变化前后的值相同,它们也能监听到。属性观察者主要有以下两个:willSet:观察者在修改之前调用。didSet:观察者在修改之后立刻调用。属性观察者的语法格式如下:面向对象类型 类型名 { ... var 存储属性: 属性数据类型 =原创 2015-11-09 09:49:18 · 2435 阅读 · 0 评论