
ios-Swift
文章平均质量分 62
rv0p111
之前由于一些原因博客没有更新,现在还是正常更新,继续分享..
展开
-
Swift当中的AnyIterator和AnySequence的使用
首先我们先看下在苹果的官方的文档中给我们的介绍其的一些方法首先是关于AnyIterator的初始化方法,官方解释就是创建一个迭代器,该迭代器在其next()方法中包装给定的闭包,所以我们下面的例子初始化AnyIterator其实就是包装为了next方法init(_body: @escaping () -> AnyIterator.Element?)然后我们再来看下例子...原创 2018-08-07 15:37:29 · 1392 阅读 · 0 评论 -
ios-collectionView?.deleteItems(at: [indexPath])造成的错误
可能刚开始对这个方法的调用也不是很熟,用的时候出现了这么一个错误Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of items in section 0. The number of items cont原创 2017-10-06 16:22:04 · 1526 阅读 · 0 评论 -
ios-Swift中KVC出现的问题
在这里一定要记录下,因为在Swift中使用KVC,总是无法的找到Swift中创建的继承自NSObject类中的属性,每次执行的都是override func setValue(_ value: Any?, forUndefinedKey key: String) { }原因是因为在Swift 4中继承 NSObject 的 swift class 不再默认全部 bri原创 2017-10-12 19:24:42 · 1597 阅读 · 0 评论 -
ios-Swift处理异常的三种方式
1、我们手动的去捕捉异常 let jsonStr="lll" let jsonData=jsonStr.data(using: String.Encoding.utf8) //在Swift中options是存放在数组中,如果我们不想写,直接传入一个空数组就可以 do {原创 2017-09-15 20:14:30 · 617 阅读 · 0 评论 -
Swift-便利构造函数和指定构造函数继承关系
这里先给出两个类,一个是Person类,一个是Student类import Foundationclass Person{ var name:String var weight:Double var height:Double //构造函数 init(name:String) { self.name = name...原创 2017-10-28 19:24:16 · 660 阅读 · 0 评论 -
ios-缩小图片大小
在实际开发中有可能会出现,用户上传的图片太大,清晰度太高,可能我们就需要考虑将其压缩或者缩小,不然的话会很消耗内存,从这个角度考虑的话,我们可以自己创建一个UIImage的分类,来将图片进行缩小。import UIKitextension UIImage{ func scaleImage(width:CGFloat)->(UIImage) { //如果我们原创 2017-10-06 14:12:12 · 448 阅读 · 0 评论 -
ios-自定义转场动画基础
在开发当中其实我们除了push视图从右往左进来,modal是从下往上进来,我们还可以自定义转场动画,目前学习的比较浅,稍微记录下。首先,之前我们modal一个控制器的时候可能是直接这么做的,这么做的话,原来的控制器其实会被暂时的移出屏幕,尽管我们dismiss的时候,可能就看到原来的控制器是在下面的,但其实这是个假象let vc = UIViewController()self?.pr原创 2017-10-09 17:07:53 · 1421 阅读 · 0 评论 -
ios-动画曲线
动画曲线我们应该或多或少都去接触过,简单介绍下下面每个枚举值的概念public enum UIViewAnimationCurve : Int { case easeInOut // slow at beginning and end,也就是开头和末尾都很慢,中间快 case easeIn // slow at beginning 开始很慢,之后很快原创 2017-10-05 12:16:38 · 666 阅读 · 0 评论 -
ios-UILabel的自动换行
以前一直没发现有这么个属性,但是现在看到了就记录下,我们之前换行的话可能都是用计算这个文本的宽和高,然后指定相应的宽度,然后再去设置numberOfLines = 0。这样设置的话把label放到tableViewCell中有的时候可能会出现计算错误的情况,所以我们最好去使用preferredMaxLayoutWidth,这个就是我们指定约束这个label的宽度来进行设置的。我们可以这么做//原创 2017-10-03 15:34:01 · 564 阅读 · 0 评论 -
ios-OC和Swift混编调用分类问题
在OC和Swift混编的时候,如果我们创建的工程是OC的工程是可以调用Swift中的exrension 分类的,但如果我们创建的工程是Swift工程就是,OC是无法调用Swift中的分类的,今天正好碰到了。记录下原创 2017-10-02 15:14:13 · 836 阅读 · 0 评论 -
ios-如果一次性向数据库中插入大量数据,应该如何处理
我们先用代码测试下func insert() { //1、获得开始的时间 let start = CACurrentMediaTime() print("开始") for i in 0..<10000 { Person(dict: ["name":"张欧\原创 2017-10-13 12:42:54 · 2793 阅读 · 0 评论 -
ios-多线程技术在开发中的应用场景
我们可能学习了多线程之后,觉得几乎都用不到多线程,因为如果用第三方框架,都已经给我们封装好了。这里举两个例子,用到多线程的概念的。如果我们自定义了一个collectionView之后,在初始化方法中想要调用下面这个方法 self.collectionView.scrollToItem(at: indexPath, at: .left, animated: false)是不可能的,因原创 2017-10-13 14:35:45 · 957 阅读 · 0 评论 -
ios-SQL语句注入的情况
运用FMDB框架中选择SQL语句是单条语句去执行,还是多条语句去执行,这个是有讲究的。就比如说我们写了个函数,然后我们给name参数传入的是"王五',0,0); DELETE FROM T_table; --",这样的话打印出来的语句就是INSERT INTO T_Person (name,age,height) VALUES ('王五',0,0); DELETE FROM T_table原创 2017-10-13 20:08:27 · 687 阅读 · 0 评论 -
ios-ScrollView缩放的实现原理
我们先看一下UIScrollView的几个代理方法 ///返回被缩放的视图 func viewForZooming(in scrollView: UIScrollView) -> UIView? { return imageView } ///缩放完成之后执行一次 func scrollViewDidEndZooming(_ scro原创 2017-10-07 17:36:58 · 1810 阅读 · 0 评论 -
ios-FMDB基础
FMDB是一个对SQLite封装的第三方框架里面有三个核心对象FMDatabaseQueue,FMDatabase,FMResultSetFMDatabase是数据库的操作对象FMDatabaseQueue在多线程下查询和更新数据库会用到,以串行队列的方式去调度数据库的操作为什么要以串行队列的方式,因为就好比你多个线程去操作一个数据库,如果都要进行写入操作,这样可能就会出现混乱,而原创 2017-10-13 15:15:41 · 434 阅读 · 0 评论 -
ios-tableView的行高计算
如果我们设置了预估的行高也就是tableView.estimatedRowHeight = 100这样的话,当前显示的行高会被调用三次的如果我们没有设置预估的行高,就会把多个cell的行高算三遍。然后再算进入屏幕范围的Cell的高度。前面是从0开始的,如下图所示。当我们滚动到第四个的时候又重新计算了三次行高原创 2017-09-27 22:47:17 · 720 阅读 · 0 评论 -
ios-Alamofire的简单使用
关于这个框架其实是AFN的作者Matt Thompson用Swift写的一个轻量级别的网络框架。在接收全新的框架之前,我觉得我们第一时间要去做的就是去阅读官方文档,以及去下载官方的示例程序。废话不多说,先记录下自己的一些使用情况和一些笔记。发送网络请求的方法,其中参数1:传入url地址参数2:传入发送请求的方式参数3:发送请求的参数参数4:指定服务器支持的编码的格式,如原创 2017-10-15 14:14:49 · 1176 阅读 · 0 评论 -
ios-闭包的写法
在这里想简单的介绍下一个函数,由其来引申出闭包的使用这个方法就是利用数组过滤的方式,这段函数的意思就是从package的emoticons数组中根据em,chs是不是等于哈哈这个字符串如果是的话,那么就往这个过滤的函数的返回值数组中增加一个元素这个函数的简介如下if let emoticon = package.emoticons.filter({ (em) -> Bo原创 2017-10-16 23:27:43 · 424 阅读 · 0 评论 -
ios-正则表达式基础
正则表达式能在多语言里通用。在ios中我们可以用正则表达式来做文字的匹配的。在这里我就记录下,我所用到的三个符号. 用来匹配任意字符,换行除外* 用来匹配任意多的字符? 用来匹配尽量少的字符在Xcode中的一个功能我们也可以使用正则表达式如下图所示我们需要先按command + shift + F 然后点击最后面的那一栏会出现一个Regular Expressi原创 2017-10-16 18:30:29 · 320 阅读 · 0 评论 -
ios-日期转换
不知道为什么,日期转换这个知识点,总是感觉自己老是忘,感觉现在也需要记录下,总结下首先如果我们要让日期字符串按照我们想要指定的格式输出的话,我们需要先创建一个格式化器let dateformatter = DateFormatter()然后我们需要指定下格式化器的环境,在这个环境下输出相应的时间。我们一般设置为en就可以 dateformatter.locale = Locale(id原创 2017-10-16 16:55:56 · 369 阅读 · 0 评论 -
ios-Swift实现自定义输出
在OC中我们要实现在Debug的状态下输出在Release状态下不输出的话,这个是比较好实现的,就是添加pch文件,然后配置下pch文件,然后在pch文件中添加一段话就可以了。关于OC中的实现可以参考这篇文章 http://blog.youkuaiyun.com/zcmuczx/article/details/76215481 但是在Swift中就不一样了。在Swift中我们可以先创建一个空白原创 2017-10-15 23:34:42 · 471 阅读 · 0 评论 -
ios-SQLite的insert OR replace语法
在实际开发中,如果我们想让应用程序一启动,去网络上获取数据,然后把这些刷新到的数据保存到本地的话,然后我们过了很短的时间把这个程序给退了,如果我们又点开,程序又去获取数据去刷新数据,这个时候假设又来了20条数据,那这个20条数据当中包含了我们上一次刷新到的保存到本地的数据,而我们如果直接调用SQLite的Insert语句来插入数据的话,这样的话数据库存储就会出现问题。所以这个时候有一条SQL语句可原创 2017-10-14 14:40:27 · 1032 阅读 · 0 评论 -
ios-emoji的显示
Emoji表情使用16进制代码标记,如何在Xcode能显示出来?我们可以将16进制的字符串先转换成uniicode编码,然后再去显示。注意显示到界面上我们可以通过设置text,label可以button可以当然还有其他控件。OC版本 NSString * charCode = @"0x1f612"; unsigned unicode = 0; [[NSScanne原创 2017-10-02 13:05:23 · 1439 阅读 · 0 评论 -
ios-蓝色文件夹和黄色文件夹
如果我们把图片放到一个文件夹中,然后把添加进工程中是以下面这个形式添加的,添加就工程就是以黄色文件夹显示的这样的话,这些图片就会直接显示到mainBundle中,而你把图片放到的那个文件夹是没有的。这样的话是不能出现重名的文件。如果我们拖入的是以Create folder references的形式,这样的话编译后,资源文件夹就会在mainBundle的对应的文件夹中,游戏的素材文件一般可原创 2017-10-02 09:31:02 · 847 阅读 · 0 评论 -
ios-swift基础
在swift中用let来定义常量,是不能修改的,var定义的是变量是可以修改的在swift中我们最好尽量的去使用let,如果你必须要修改这个变量的时候再去用var,这样程序会更安全在swift中会根据设置数值的的代码,来确定常量或变量的类型整数的默认类型是Int Int默认是64位的长整型小数的默认类似是Double 精度更高在swift中,任何时候都不会去做隐式的原创 2017-09-09 11:16:29 · 471 阅读 · 0 评论 -
ios-VFL语言
苹果味了简化autolayout的编写,而推出了一种可视化的语言就是VFL,VFL的具体使用如下所示 /**使用VFL:可视化格式语言 H 水平方向 V 垂直方向 | 边界 []包装控件 views:表示是一个字典 [名字:控件名] - VFL 字符串中表示控件的字符串原创 2017-09-17 10:34:47 · 320 阅读 · 0 评论 -
ios-Swift中的单例写法
因为静态去的对象只能去设置一次数值,所以我们可以用静态常量来创建一个对象,从而得到单例的效果,如下代码所示 static let tool = SoundTools()在Swift中单例的写法和懒加载很类似,几乎一模一样了,如下所示 static var instance:SoundTools = { return SoundTools() }()这个也是在第一原创 2017-09-17 19:43:53 · 1122 阅读 · 0 评论 -
ios-Swift中封装AFN中的GET和POST请求
当我们通过CocoaPods下载完AFN框架之后,我们想在工程中去应用它我们需要加一个import的头文件 import AFNetworking我们怎么去找这个头文件就是在我们这个项目中去寻找具体写法如下所示import UIKit//导入头文件import AFNetworking//定义请求的枚举enum ZXRequestMethod :String {原创 2017-09-18 17:53:00 · 738 阅读 · 0 评论 -
ios-AFN中默认返回的数据转换成二进制数据
在我们通过AFN去访问接口,获取的数据,是自动的帮我们做了反序列化,我们看不出类型是什么,这样我们在字典转模型的时候就不好去设置对应属性的类型是什么,如果我们想要知道具体数据的类型是什么,我们可以这们做,如下代码所示 //如果我们要知道返回的数据内容的类型,我们应该先转换成字符串格式,然后再看具体的数据类型,如果是数字的话就不会有引号原创 2017-09-20 07:45:10 · 1973 阅读 · 0 评论 -
ios-自动布局约束的问题
目前的自动布局的框架有两个框架是很好用的一个就是SnapKit 还有个就是Masonry,为什么要使用框架,因为苹果自带的框架我们使用起来代码写的太多了。所以我们可以使用第三方框架来编写。其中这里补充一点就是我们如果已经给一个控件添加过约束,我们还想去修改的话,我们只需要通过下面这个代码进行判断,满足条件就可以修改了。 //通过判断contenView的约束,然后根据属性和用户对象来判断约束是原创 2017-09-27 13:55:47 · 381 阅读 · 0 评论 -
ios-sizeToFit
对于sizeToFit,大家应该都用过,这里记录下关于它的一些知识。我们一般使用sizeToFit(),一般是对按钮,标签,图片使用的可能会比较多,我们是不能重写sizeToFit这个方法,但是我们可以重写sizeThatFits这个方法,因为sizeToFit就会去调用sizeThatFits这个方法.原创 2017-09-27 13:26:34 · 483 阅读 · 0 评论 -
ios-tableView自动计算行高
最近通过学习了解到一个东西就是tableView可以自动的计算行高了,只需要配合autoLayout来使用就可以了先设置如下所示的代码 //先设置预估行高 tableView.estimatedRowHeight = 200 //再设置自动计算行高 tableView.rowHeight = UITableViewAutomaticDimens原创 2017-09-25 19:35:34 · 1220 阅读 · 0 评论 -
ios-Swift中解除循环引用的三种方式
1、加一个标记,表示里面用到的self都是弱引用 test4 {[weak self] (name)->() in //self?表示如果对象一旦被释放了,就不再访问其属性或者方法 print(self?.view) }2、OC中的传统的方法 //由于weak修饰的属性在运行时可原创 2017-09-15 20:44:46 · 665 阅读 · 0 评论 -
ios-Swift的只读属性和懒加载对比
在Swift中的只读属性可以这么写var title1:String? { get { return "MM" + (opti ?? "") } }简写是这样的 var title2:String? { return "MR" + (opti ?? "") }还有种叫法叫做计算型属原创 2017-09-15 18:29:15 · 732 阅读 · 0 评论 -
ios-Swift中的懒加载和getter、setter方法
Swift中的懒加载是比较简单的,最简单的做法就是我们可以直接这么写 lazy var person: Person = Person()还有种写法是下面这种 lazy var person: Person = { return Person() }()代码的执行过程是这样的,第一次访问属性的时候,会先去执行后面的闭包代码,将闭包的结果保存到这个p原创 2017-09-15 15:20:58 · 1204 阅读 · 0 评论 -
ios-自定义UICollectionViewFlowLayout
在开发中其实我们使用collectionView的情况可能会比较多,如果我们想自定义一个流水布局应该怎么去做,在Swift中,如果我们想给自己做的collectionView添加自定义的布局,我们可以重写下UICollectionViewFlowLayout的prepare()方法,具体代码如下所示,这个方法是在布局前会去调用一次,还有就是我们设置布局为invalidated,也会去重新的计算布局原创 2017-10-01 23:23:19 · 994 阅读 · 0 评论 -
ios-Swift中的闭包
关于闭包,其实有几个知识点如果理解了,可能就会比较轻松了1、函数名其实就是指向代码区的一个指针地址2、所以我们在运行时,调用的函数就是通过函数的地址去找到第一句代码在哪里,然后再去执行。我们定义一个函数,函数的参数是一个闭包,然后我们给这个参数传入函数的地址是可以的。比如说这样子func test() -> () { print("hello world")原创 2017-09-25 23:22:52 · 327 阅读 · 0 评论 -
ios-TextKit框架基础
iOS7之后引入TextKit框架,能够很方便的可以通过方便的接口去修改文字的样式和排版,解决图文混排的问题。而在ios7之前解决起来都会比较的困难。TextKit中有三个比较重要的对象1、NSTextStorage,是NSMutableAttributedString的子类,专门用来存储文本的和管理控件的属性文本,NSTextStorage引用着NSLayoutManager,当NSTe原创 2017-10-17 17:51:42 · 493 阅读 · 0 评论 -
ios-使用SDWebImage加载Gif图片的问题
我们在SDWebImage 4.0之前,如果直接使用sd_setImageWithURL:(nullable NSURL *)url completed:(nullable SDExternalCompletionBlock)completedBlock是可以显示gif图像的,但是在4.0之后我们会发现在github上面,SDWebImage上面有这么一段话,大致的意思就是如果再4.0开始,我们还原创 2017-10-08 09:20:38 · 4365 阅读 · 0 评论 -
ios-UIImageView的drawRect方法
据说UIImageView是专门为显示图片做的控件,用了最优显示技术,所以不让调用darwrect方法。所以我们如果写了一个UIImageView的子类里面重写了drawRect方法是不会被调用的。import UIKit//UIImageView中不会调用drawRect方法class ProgressImageView: UIImageView { override f原创 2017-10-08 12:50:30 · 2624 阅读 · 0 评论