自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 收藏
  • 关注

原创 基本的内部排序

在上一篇笔记《顺序表的查找》中,我们用到了有序表,所以这里简单的搞一下有序表——对任意给定的列表按照某种顺序进行排序,使其成为一个新的有序列表。  对列表进行排序的方法有很多,这里只简单的介绍一下插入排序(Insertion Sort)、冒泡儿排序(Bubble Sort)和选择排序(Selection Sort)。一、插入排序  插入排序是最简单的排序,其基本操作是,将一个元素插入到一个已经排序好

2017-09-28 02:56:49 392

原创 顺序表的查找

查找(Searching),在计算机中是一个比较常用的操作,通常是指根据给定的某个值,在查找表中确定一个其关键字等于给定值的记录或者元素。如果表中存在这样的元素,则称查找成功,否则就表示查找失败。  我们今天要说的查找,是指基于顺序表的查找,而且主要是静态查找(Static Search),也就是说,在查找过程中不涉及元表中元素的修改。一、顺序查找(Sequential Search)  顺序查找又

2017-09-27 18:58:03 6682

原创 Swift 4新特性研究

先占坑,把代码撸上去,有时间再慢慢填坑,没时间就算了

2017-09-21 05:50:52 335

原创 Swift中队列的实现

先占坑,有时间再详细解释//MARK: - 队列的基本实现public struct Queue { // 泛型数组:用于存储数据元素 fileprivate var data = [T]() /// 构造函数:创建一个空的队列 public init() {} /// 入队列操作:将

2017-09-21 05:50:50 1884

原创 Swift中栈的实现

先占坑,以后有时间再来慢慢填。// MARK: - 实现一个基本的Stack类型public struct Stack { // 声明一个泛型数组,用于存储栈里面的元素 fileprivate var elements = [T]() /// 计算属性:获取栈中元素的个数 public var count: Int {

2017-09-21 05:50:47 515

原创 从文件中读取字符串

问题:如何从磁盘文件中读取字符串儿,然后按行将其倒序输出?  下面一段材料取自陈寿《三国志》卷三十五诸葛亮传,我把它分成了10段,现在要求从磁盘文件中读取这段文字,然后按照一定的规则倒序输出。比如说,如果我要求输出3行,系统会依次输出第10、9、8三行;如果我要求输出20行,则系统会依次输出10、9、8 ... 3、2、1行;如果我要求输出0行,则系统什么也不做。(01) 自董卓已来,豪杰并起

2017-09-21 05:50:44 6820

原创 求平方根或近似平方根

问题:给定一个正整数,如果它有正整数平方根,则求出它的平方根;如果它没有正整数平方根,则求出最接近的正整数平方根。不能使用sqrt(_: )函数。  比如说,5、6、7、8都是没有正整数平方根的,但是最接近它的正整数平方根是2,而9的正整数平方根是3。现在要求写一个函数,能够计算出给定正整数的正整数平方根,或者最接近它的正整数平方根。  这个问题的解决方案有好几种,我们先来给一个性能比较差,并

2017-09-21 05:50:42 1885

原创 判断一个整数是否为素数

问题:给定一个正整数,如何判断它是否为素数?  素数,又称之为质数,是指在大于1的自然数中,除了1和它本身以外不再有其他因数,这样的数被称为素数。func challenge(number: Int) -> Bool { // 只有当输入的整数是大于等于2时,题目才有意义 guard number >= 2 else { return false }

2017-09-21 05:50:39 7729

原创 交换两个数

问题:如果要求不使用临时变量,应该如何交换两个变量的值?  解决这个题的方式有好几种,第一种当然就是使用系统自带的swap(_: _:)函数了。不过,这种抖机灵的做法一般人很难欣赏,而且说不定它内部实现使用了临时变量也说不定:// 这是使用临时变量的做法,也是我们在C语言中常用的做法func swap1(_ a: inout T, _ b: inout T) { let tmp =

2017-09-21 05:50:37 300

原创 自己写一个pow()函数

问题:请自己动手写一个pow()函数。  我们在学习C语言的时候,可能已经接触过pow()函数,它是C语言标准库函数中自带的一个函数,使用的时候只需包含就可以了,不需要你自己动手去实现。  在C语言标准库函数中,pow()函数是这样声明的double pow(double x, double y),其作用就是返回x的y次幂。幂函数的实现还是比较简单的,我们就自己动手写一个:func chal

2017-09-21 05:50:34 3911 1

原创 在一定范围内生成随机数

问题:给定一个最小正整数和一个最大正整数,如何在它们之间生成随机数(包含上下界)?  如果你有一定的开发经验,肯定用过随机颜色对某些控件做调试。实际上,生成随机颜色的实质也就是在一定范围内生成随机数。常用的生成随机数的函数是arc4random_uniform(_ __upper_bound: UInt32) -> UInt32,在使用它的时候有几点需要注意:1、它生成的随机数范围是[0,

2017-09-21 05:50:31 4427

原创 逻辑分支和嵌套三目运算

问题:找出1~100中所有能被3整除,或者能被5整除,或者既能被3整除又能被5整除的数。  如果只是单纯的问题求解,那么这个答案就比较简单了,只要逻辑捋顺畅了,用常规的for ... in循环就可以解决:func challenge() { for i in 1...100 { if i % 3 == 0 && i % 5 == 0 { prin

2017-09-21 05:50:29 1178

原创 如何逆转一个字符串

问题:给定一个字符串儿,如何对其进行逆转操作?  比如说给定一个字符串儿"Just Do IT",我们需要将其逆转成"tsuJ oD TI",那么这个又该如何去操作呢?这个可能一时不好操作。不过,如果是一个独立的单词,那就比较好办了:先调用字符串儿的characters属性,将其内容转换成字符集合,然后再调用reversed()函数,将字符集合里面的内容进行逆转,最后再将这些字符集合重新转换成S

2017-09-21 05:50:26 1009

原创 如何返回一个字符串中多个单词相同的前缀

问题:给定一组单词,如何返回这些单词中最大的前缀?  需要说明的是,这里所说的前缀并不是指英语语法里面的前缀,而是指多个单词前面出现的相同部分。比如说,abandon和abandoned的最大前缀就是指“abandon”,而abandon、abandoned和abbreviation的最大前缀是“ab”。如果给一个英语字典,或者单词表就比较容易理解了:英语单词表.png  解题过程中还是

2017-09-21 05:50:23 1079

原创 字符串的应用举例

问题:给定两个字符串,如何确保这两个字符串长度相等,并且字符串儿中不同字符出现的个数不能超过3个?  上面的问题有两个限定条件:首先,两个字符串儿的长度要相等;其次,允许它们拥有不同的字符,但是不同字符存在的个数不能超过3个。顺着这两个限定条件,我们整理一下思路,很容易就能想出解决的方案。可以用guard或者if-else来对两个字符串儿进行校验,从而保证它们的长度相等。推荐使用guard,因为

2017-09-21 05:50:21 2903

原创 判断一个字符串中是否包含全部26个字母

问题:给定一个字符串儿,如何判断它里面是否包含全部26个英文字母?  就以CGTN今天的头版新闻为例,如何判断下面这段字符串儿中是否包含全部的英文字母?字符串儿.png  其实思路很简单,动手数一数就知道了

2017-09-21 05:50:16 5002 2

原创 如何删除字符串中多余的空格

问题:如何将一个字符串儿中多余的空格给删掉?  需要注意的是,我们只要求删除多余的空格,但是并不要求把所有的空格都删掉。保留必要的空格是保持原有语义所必须的,如果把句子中所有的空格都删除,那么就会造成多个单词连成一坨而无法辨别。  问题的解决思路还是比较简单的,可以用空格或者换行把字符串儿分割成独立的单词或标点符号,然后将所有的空格都过滤掉,最后再用一个空格把所有的独立的单词或者标点符号重新连

2017-09-21 05:50:13 3163

原创 从一个字符串儿中移除重复的字符

问题:如何从一个给定的字符串儿中移除重复的字符?  需要注意的是,我们只需要移除二次出现的字符,并不是要将所有重复的字符都从给定的字符串儿中删除。比如说“fannnnnny”这个字符串儿,我们只需要将其修改为“fany”就可以了,而不是要将其修改为“fay”。如果不考虑原始字符串儿中剩余字符的顺序,只需要利用Set中不能出现重复元素这一特性就可以了:let string = "funny"/

2017-09-21 05:50:10 920

原创 计算特定字符在字符串中出现的次数

问题:随便给定一个字符串儿,如何计算一个特定字符在该串儿中出现的次数?  比如说,我现在给定这样一段字符串儿:“The US State Department on Friday has officially delivered notice to the UN of its intentions to withdraw from the 2015 Paris climate pact.”,你能

2017-09-21 05:50:08 1859

原创 判断一个字符串中是否包含另一个字符串

问题:如何判断一个字符串儿是否包含另一个字符串儿?  其实,字符串儿String里面本身就包含一个contains()方法,它可以在一定程度上判断一个字符串儿里面是否包含另一个字符串儿。但是,它比较傻,所能做的工作有限,比如说:"Hello, July".contains("July") // 其返回值为true"Hello, July".contains("july") // 其返回值

2017-09-21 05:50:05 12102

原创 判断两个字符串是否包含相同的字符

问题:如何判断两个字符串儿是否包含相同的字符?  两个字符串儿包含相同的字符,是指它们所包含的字符个数相同,并且每个字符串儿中的字符都能在另一个字符串儿中找到与之一一对应的字符,但是并不拘泥于字符的排列顺序。比如说字符串“xiaomi”和“ximaio”就包含相同的字符,而“xiaomi”与“XiaOmi”以及“wocaoxiaomi”就不包含相同的字符。  确定了什么是包含相同的字符之后,我

2017-09-21 05:50:03 16380 2

原创 判断一个字符串是否是回文

问题:如何判断一个字符串儿是否是回文?  所谓的字符串儿回文,就是无论是正序读还是反序读,它都是一毛一样的,比如说字符串儿“rotator”,无论是从左往右读,还是从右往左读,它都是同一个字符串儿。  思路:因为回文是正着读和反着读是一样的,所以我们马上就想到了reversed()函数。而这个函数的返回值是一个数组,因此最后肯定会用到数组的比较。好在数组属于集合,是值类型,比较起来就容易多了:

2017-09-21 05:50:00 3805

原创 判断字符串中的字符是否具有唯一性

问题:如何判断输入的字符串儿中的每个字符是否都具有唯一性?  我们先来随便定义一个可以输入字符串儿的函数,然后再调用这个函数,看看返回的结果是否和我们预期的结果一致:func challenge(input: String) -> Bool { return true}challenge(input: "No duplicates") // 应该返回truechall

2017-09-21 05:49:58 1895

原创 来搞一搞UserNotifications本地通知

UserNotificationsUserNotificationsUIHuman Interface Guidelines - NotificationsLocal and Remote Notification Programming GuideIntroduction to NotificationsAdvanced NotificationsWhat's New in the Apple

2017-09-21 05:49:55 562

原创 Swift编码风格

编码风格是一个比较古老的话题,一般认为它最早是在布里安·柯尼汉(Brian Kernighan)和丹尼斯·里奇(Dennis Ritchie)合作出版的《The C Programming Language》一书中出现的,这一风格也被称之为K&R风格。现在大多数程序员使用的编码风格是Google编码风格。虽然对于机器而言,编码风格并没有什么卵用,但是对于程序员而言,良好的编码风格还是非常的重要。因

2017-09-21 05:49:52 529

原创 Swift命名规范

在Swift中自定义名字的时候,通常是采用驼峰命名法,也就是混合大小写字母来命名。驼峰命名法又分为小驼峰和大驼峰。小驼峰第一个单词要小写,后面的单词首字母大写,比如说myIntArray;大驼峰所有单词首字母都大写,比如说ViewController。在实际编程过程中,根据内容的不同来选择小驼峰和大驼峰,具体情况如下:类、结构体、枚举和协议的命名应该采用大驼峰;文件名应该采用大驼峰,比如说V

2017-09-21 05:49:50 1196

原创 Swift中协议的基础知识

在Swift中,协议用于统一方法和属性,或者说协议是特定的方法和属性的集合,但是它本身并没有实现,它只有声明,具体的实现是由其它遵守该协议的主体来执行的。类、结构体和枚举在声明的时候,都可以遵守一个或者多个协议,并实现协议所要求的属性或者方法。协议的格式一般为:// 定义协议protocol 协议名 { 协议内容}// 遵守协议class(struct/enum) 类型名: 父

2017-09-21 05:49:47 393

原创 Swift中的类型检查与转换

类型转换与检查在Swift中的应用还是比较广泛的,一个典型的例子就是在返回collectionView数据源的时候,需要将cell的类型转换成自定义cell的类型:// MARK: - UICollectionView的数据源方法extension WBPhotoBrowserController : UICollectionViewDataSource { func collect

2017-09-21 05:49:45 444

原创 Swift中的构造函数及其继承

在Swift中,继承只能发生在类身上,结构体和枚举是不能够被继承的。一个类可以继承另一个类的方法、属性和下标。当一个类继承自另一个类时,这个类就被称之为子类,而被继承的类则被称之为父类(超类)。子类可以重写父类的方法、属性和下标。  在Objective-C中,所有的类都继承自NSObject,而Swift中的类可以没有父类。没有父类的类被称之为基类。NSObject就是Objective-C中

2017-09-21 05:49:42 830

原创 Swift中的构造方法

结构体和类在创建实例的过程中需要进行一些初始化的工作,这个过程被称之为构造过程。同样,这些实例在使用完成之后需要做一些清除工作,这个过程被称之为析构过程。下面,我们来学习一下Swift中的构造和析构。  1、构造函数  结构体和类在实例化的过程中会调用init()方法,而这个方法被称之为构造函数。与Objective-C中的构造函数不同,Swift中构造函数没有返回值,可以重载。通常情况下,在

2017-09-21 05:49:39 340

原创 Swift中的属性

我们都知道,类是由属性和方法组成的,一般而言,属性主要是用来访问数据成员,而方法则是用来执行某些操作,比如说计算数据等等。在Objective-C中,属性主要是用来访问封装之后的数据成员,属性本身并不存储数据,数据是由数据成员来存储。但是在Swift中,属性承担了多种角色,它远比Objective-C中的属性更为强大。  Swift中的属性可以分为存储属性和计算属性,其中存储属性就相当于Obje

2017-09-21 05:49:37 307

原创 Swift中的访问级别

我在之前的笔记《项目基本架构的搭建》中提到过访问级别,这里再做一个详细的补充。Swift提供了5种访问级别,分别为open、public、internal、fileprivate和private。它们既可以修饰类、结构体、枚举等面向对象的类型,也可以修饰变量、常量、下标、元组、函数和属性等类型。其具体的含义为:open:其访问限制是最小的,任何被open修饰的实体,无论是在自己的模块内部,还

2017-09-21 05:49:34 624

原创 Swift中的枚举

在Objective-C中,枚举是用来管理一组相关常量的集合,使用枚举可以提高程序的可读性,使代码更容易维护。但是,在Swift中,枚举的作用已经不仅仅是用来定义一组枚举了。在Swift中,枚举还具有一定的面向对象的特点。在Swift中,枚举的声明还是使用关键字enum,其具体格式为:enum 枚举名 { 枚举的定义}  在学习Objective-C的时候,我们知道,枚举的成员值是整

2017-09-21 05:49:31 344

原创 Swift中的闭包

1、闭包的概念  一门计算机语言如果要支持闭包,必须要有两个前提:支持函数类型,也就是说可以将函数作为参数进行传递,或者能够将函数作为返回值;支持函数嵌套。闭包是一种自包含的匿名函数代码块,它可以作为表达式、函数参数或者函数返回值。闭包表达式的运算结果是一种函数类型。闭包表达式的标准语法格式为:// 闭包表达式的标准格式{(参数列表) -> 返回值类型 in 语句组}// 闭包

2017-09-21 05:49:29 570

原创 Swift基础知识补充(三)

1、集合类型  Swift中的集合类型主要是指Array、Dictionary和Set,详细情况参见《Swift中常用的数据结构(上)》。Array中的元素是有序的,可以重复出现;Set里面的元素是无序的,不能重复出现。另外,Dictionary中的键(Key)和值(Value)也是无序的,并且键(Key)是不能重复的,但是值(Value)却可以重复出现。  声明数组和字典时,既可以使用泛型语

2017-09-21 05:49:26 244

原创 Swift基础知识补充(二)

1、字符  在Objective-C中,字符是放在单引号('a')之间的。但是,在Swift中不能用这种方式表示。Swift中无论是字符还是字符串,都必须使用双引号("a"和"abc"):let c: Character = 'a' // 编译错误// 字符类型也需要放在双引号之间let d: Character = "d" // 正确的写法let e: Character =

2017-09-21 05:49:23 457

原创 Swift基础知识补充(一)

1、数据类型  在Swift数据类型主要分为值类型和引用类型。其中,整型(Int)、浮点型(Float)、布尔型(Bool)、字符(Character)、字符串(String)、元组、集合(Array、Dictionary和Set)、枚举(enum)和结构体(struct)均属于值类型;而类(class)是引用类型。值类型在传递或者赋值的过程中先创建一个副本,然后再把副本传递或者赋值过去,在函数

2017-09-21 05:49:21 334

原创 项目基本架构的搭建

一、启动图片的设置  项目启动图片的设置有多种方式,但是通常情况下,都是用LaunchImage来管理的。具体的操作方式比较简单,但是一定要注意,当你设置LaunchImage作为启动图片时,一定不要忘记把Launch Screen File中的文字给删除,并且在运行程序之前,最好是把之前运行过的程序给删掉:设置启动图片的细节.png二、初始化项目  项目配置完成以后,通常情况下,需要

2017-09-21 05:49:18 3606

原创 《Swift数据结构和算法》读书笔记专题

已经有好长时间没有更新iOS开发笔记了,近期准备更新《Swift Data Structure and Algorithms》读书笔记,预计是每周一篇,如果时间充足的话,会尽量多更新一点。Swift Data Structure and Algorithms.jpeg  在这里(280),不会涉及学习算法和数据结构有没有用(如果你想知道到底有没有用,可以查看相关书籍,或者自行百度),也不争

2017-09-21 05:49:16 695

原创 RunLoop的基础知识

RunLoop是多线程开发中非常重要的一个知识点,比较抽象。一般来讲,一个线程一次只能执行一个任务,执行完成后线程就会退出。但是,在实际开发过程中,我们可能需要这样一个机制,让线程能随时处理事件但并不会退出。也就是说,在线程没有处理消息时,可以进入休眠状态,以避免资源占用。而在有消息到来时,可以立刻被唤醒。这种机制就是RunLoop。一、RunLoop的基本概念    1、RunLoop的作用

2017-09-21 05:49:13 416

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除