自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 值类型和引用类型

  像其它很多编程语言一样,Swift中也有很多内建的基本类型,比如说,整型、浮点型、数组、字典、元组,以及类等等。按照基本类型实例在作为参数进行传递,或者赋值给另外一个实例时所遵循的不同机制,这些基本类型又可以划分为值类型和引用类型。结构体、枚举和元组是典型的值类型数据结构,类则是引用类型数据结构。一、值类型和引用类型的基本概念  值类型和引用类型具有非常明显的区别,这主要体现在它们...

2018-03-13 02:32:03 587

原创 Swift数据结构——栈的实现

  栈(Stack)是一种后入先出(Last in First Out)的数据结构,仅限定在栈顶进行插入或者删除操作。栈结构的实际应用主要有数制转换、括号匹配、表达式求值等等。栈数据结构示意图如下所示:一、背景知识  从上面的示意图中,我们知道了栈是一种受限制的数据结构,它不像数组那样可以随机存取,只能在栈顶执行入栈和出栈操作,并且最先入栈的元素最后出栈,而最后入栈的元素最先出栈。...

2018-02-21 21:05:04 1618

原创 Swift数据结构引言

  了解不同数据结构的优劣,对我们今后的编程工作将十分有帮助(至于有什么帮助,可以自行百度,也可以翻书)。作为这个系列的第一篇博客,我们将重新复习一下Swift中几种内建的基本数据结构。  通常情况下,从元素之间的关系上来讲,我们习惯上将数据结构分为两种基本类型:顺序存储数据结构和连式存储数据结构。顺序存储数据结构的特点是,逻辑关系上相邻的两个元素,它们在物理位置上也相邻,也就是说数据是存储在...

2018-02-15 20:46:37 547

原创 iOS项目练习

最进在练习用storyboard做项目,所以就搞了一个双语版的Demo,不过由于对Objective-C不是特别熟悉,所以Objective-C版本的做得比较慢。总体而言,项目的完成度都不是很高,但是后续一定会慢慢去完善,尽最大限度的去模拟原始项目真实的样子。  Swift项目做得稍微多一点,目前已经开始慢慢的去展示数据。最开始的时候,本来想通过SwiftyJSON做模型转换,但是后来发现服务

2018-02-06 17:23:27 1275

原创 修复导航控制器的半屏pop返回手势

我们在《隐藏导航栏并重建全屏pop手势》中说过,如果隐藏了导航控制器的navigationBar,那么就会造成系统默认的侧滑返回功能失效。其实,除了隐藏导航控制器的navigationBar会造成侧滑返回失效之外,只要是修改了默认的leftBarButtonItem,就会造成侧滑返回功能失效,为此,我们需要对其进行修复。  幸运的是,修复系统默认的侧滑返回功能比重建全屏pop手势要简单得多,只

2018-02-04 22:13:18 461

原创 通过xib自定义控件所遇到的自动布局大坑

虽然说,在很多情况下,使用Storyboard或者xib开发具有方便快捷的优点,但是,如果使用不熟练的话,将会面临许多巨大无比、令人沮丧的坑。为了尽快踩到这些天坑,我还是决定用Storyboard和xib来搞一搞。  我准备搭建下面这样的界面,因此考虑用xib来创建顶部明星打榜。用xib的好处是,布局好第一个明星板块,其它两个直接使用Ctrl+D,再进行总体布局就可以了。如果是使用纯代码的话…

2018-01-31 20:38:27 849

原创 隐藏导航栏并重建全屏pop手势

在实际开发过程中,经常碰到push到下一个控制器时,需要隐藏它底部的tabBar和顶部的navigationBar,并且pop回来之后,底部的tabBar和顶部的navigationBar又需要复原。那么,这种功能是如何实现的呢?我们先来看一下没有隐藏tabBar和navigationBar之前的界面:一、隐藏底部的tabBar  隐藏底部tabBar的功能最容易实现,通常情况下,

2018-01-31 18:42:32 900

原创 Python之旅

有人说,”Python除了不能生孩子之外,什么都能做”。这句话当然有些戏谑和夸张,但是也能从某种程度上反映出Python的强大。其实很早之前就决定要开始学习Python了,但是一直没有付诸行动,这次刚好借着准备深入学习iOS的机会来学习一下Python。  自学了一阵子的iOS开发,决定了解一下更深层次的东西,于是就买了RayWenderlich的《Advanced Apple Debugging

2017-12-18 21:51:19 409

原创 Swift中的内存管理

一、内存分配  值类型,比如说枚举和结构体,它们的内存分配和管理都十分简单。当你新建一个值类型实例时,系统会自动为实例分配大小合适的内存。任何传递实例的操作,比如说作为参数传递给函数,以及存储到属性的操作,它们都会创建实例的副本。当实例不再存在时,Swift会回收内存。因此,我们不需要做任何事情来管理值类型的内存。  在Swift中,内存管理这个议题,通常都是和引用类型,尤其是类相关的。跟值类型一样

2017-11-28 15:36:15 1376

原创 通过服务器返回的数据来创建子控制器

如果你有看过这个项目之前的代码,肯定知道我在搭建首页模块的时候,是通过离线数组来创建子控制器的:/// 创建子控制器private func setupChildViewControllers() { // FIXME: - 从网络获取标题的Tabs,然后通过JSON来设置标题 // 创建子控制器的标题 let titles = ["分类", "推荐", "精品", "直播"

2017-11-26 15:02:08 324

原创 处理直播界面cell上面的小挂件

上回说到直播界面数据解析完了,但是cell上面显示正在直播和在线收听人数,以及预约直播时间等小挂件的数据解析完了,但是UI界面没有做出来,今天终于抽空做完了,先来看一下预览效果:  这个做起来其实非常的简单,只需要把所有的小挂件都添加上去,然后默认它们都隐藏,最后根据服务器返回的数据来决定最终需要显示哪些、隐藏哪些。唯一稍微麻烦一点的是预约透明控件的处理,这里面主要有两个点:第一个,服务器返回的时间

2017-11-21 11:11:54 687

原创 低仿蜻蜓UI

我已经有好长时间没有更新博客了,主要是懒癌发作,刚好最近闲暇时间模仿了一下蜻蜓FM的UI界面。一级界面除了首页的广播模块没有找到数据接口没有做之外,其它的基本上做完了。直播界面的cell做得不完整,比如说左上角显示的“直播中”或者预约直播、右下角显示的在线人数、右上角显示的大咖等级,以及左下角显示的热度等小挂件都没有做,不过数据已经解析完成了,等哪天有空的时候再补充上去。先来看一下总体预览:  在来

2017-11-18 21:41:58 438

原创 Ruby基础知识学习

最近在学习Ruby,练习代码和相关笔记都放在了github上面,等有空了再慢慢的整理成博客笔记。目前正在看《Ruby基础教程(第5版)》,接下来计划依次看完《Ruby on Rails教程(原书第4版)》和《RESTfull Rails Development》。前面两本书图灵社区均有电子版出售,最后一本书亚马逊上有纸质版出售。  《Ruby基础教程》这本书看完了前面6章,因为从来没有写过Ruby,

2017-10-21 15:49:51 795

原创 自定义UITabBarController、UITabBar和UIButton

通常情况下,在实际开发过程中经常需要自定义UITabBarController,并且很有可能还涉及到自定义UITabBar和UIButton的情况。就以闲鱼为例,我们尝试着模仿一下它。  为了更好的演示和说明,整个演示项目都将使用纯代码来搭建。所以,来到AppDelegate文件中,实现以下代码:func application(_ application: UIApplication, didFi

2017-10-14 09:06:05 2049

原创 基本的内部排序

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

2017-09-28 02:56:49 355

原创 顺序表的查找

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

2017-09-27 18:58:03 6374

原创 Swift 4新特性研究

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

2017-09-21 05:50:52 282

原创 Swift中队列的实现

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

2017-09-21 05:50:50 1758

原创 Swift中栈的实现

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

2017-09-21 05:50:47 474

原创 从文件中读取字符串

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

2017-09-21 05:50:44 6740

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

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

2017-09-21 05:50:42 1790

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

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

2017-09-21 05:50:39 7601

原创 交换两个数

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

2017-09-21 05:50:37 278

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

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

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

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

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

2017-09-21 05:50:31 4344

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

问题:找出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 1136

原创 如何逆转一个字符串

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

2017-09-21 05:50:26 932

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

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

2017-09-21 05:50:23 1030

原创 字符串的应用举例

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

2017-09-21 05:50:21 2826

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

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

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

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

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

2017-09-21 05:50:13 3080

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

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

2017-09-21 05:50:10 854

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

问题:随便给定一个字符串儿,如何计算一个特定字符在该串儿中出现的次数?  比如说,我现在给定这样一段字符串儿:“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 1778

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

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

2017-09-21 05:50:05 11926

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

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

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

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

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

2017-09-21 05:50:00 3768

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

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

2017-09-21 05:49:58 1774

原创 来搞一搞UserNotifications本地通知

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

2017-09-21 05:49:55 510

原创 Swift编码风格

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

2017-09-21 05:49:52 485

原创 Swift命名规范

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

2017-09-21 05:49:50 1134

空空如也

空空如也

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

TA关注的人

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