- 博客(140)
- 资源 (13)
- 收藏
- 关注
原创 Swift基础 集合Set
集合定义集合是无序的,数组是有序的。var a:Set = [1,2.0,3.14,48]var b:Set<Int> = [1,2,3,4,5]基本的增删改查和数组类似。Set合并var a:Set = [1,2,3,4]var b:Set = [1,2,3,4,5]var c = a.union(b)print(c)//运行结果:[1,3,2,5,4]//相同的元素合并时会略过除此之外还有比较两个集合异同的方法。Set的过滤和数组的使用方法一致。可点阅我的文
2022-05-06 11:44:18
326
原创 Swift基础 Array数组
数组数组是用来存储相同类型数值的序列化列表。 let studentName : [NSString] = ["xiaoMing","xiaoHong"] var studentHeight : Array<CGFloat> = [172.5,168] studentHeight[1] = 168.5 print(studentName) print(studentHeight)运行结果:[xiaoMing, xiaoHong][172.5, 1
2022-05-06 11:42:26
688
原创 Swift基础 while repeat-while循环
swift里没有do-while循环,换了个名字叫repeat-while循环repeat-while循环实际上就是do-while循环… var sum = 0 var index = 0 repeat{ index+=1 sum+=index }while( index < 100) print(sum);运行结果: 5050...
2022-05-06 11:41:25
304
原创 Swift基础 区间运算符
区间运算符闭区间运算符:a … b半闭区间运算符:a …< b常用于循环结构中.for-in循环for-in循环语句中是使用区间运算符来控制循环的。 var sum = 0 for index in 1 ... 10 { sum+=index; } print(sum);for-in循环语句中使用stride函数来控制循环,这会使得在一定的区间内跳过某些数值,比如2,4,6,8,10,以间隔2为遍历。 for index in st
2022-05-06 11:38:47
239
原创 Swift基础 元组数据类型
元组:不同数据类型的封装将不同类型的字面值用括号括起来的元素。 let student = (2021,"xiaoMing",172.5) let student(Int,String,Double) = (2021,"xiaoHong",160.5)对元组元素初始化,对其中内部的值命名。 let student = (year:2021,name:"xiaoMing",height:172.5) print(student.year) print(studen
2022-05-06 11:37:18
245
原创 Swift 关于数据类型、可选类型
类型别名给数据类型取别名。比如给Int数据类型取别名,一个叫小孩,一个叫少年,一个叫青年,一个叫老年。实际上都是Int数据类型,只不过在代码阅读的时候,方便理解得多。给数据类型取别名,使用typealias关键字。 typealias child = Int typealias Teenager = Int typealias young = Int typealias old = Int类型转换强制转换:() var a = 11 var b =
2022-05-06 11:36:22
383
原创 Swift基础 String类型
关于字符串判断是否包含字符 var a = "hello" if a.contains("hell"){ print("hell") }追加字符 var a = "hello" a.append(" world") print(a)//运行结果:hello world插入字符 var a = "hello" //从0开始算,在3的位置插入“ ” a.insert(contentsOf:" ", at:a.index(a.star
2022-05-06 11:33:25
1076
原创 Swift基础 let与var 和 关于声明
let 常量程序运行期间,值不可改变的量。 let word = "hello world" let 常量名 = 值var 变量可变化的数据。 var word = "hello world" word = "你好" //值可更改 var 变量名 = 值声明变量的数据类型:可显式声明也可以不声明: var year : Int = 2018 var old = 18当为隐式声明的时候,编译器会通过初始值来推断变量的类型。那么也就是
2022-05-06 11:31:20
250
原创 简单的数据压缩
简单的数据压缩压缩实际上就是一种节省空间的行为,比如一个字符占8位,当我们需要用一串字符来记录某种信息时,所占大小就是字符数x8.比如现在需要记录某一串遗传信息核苷酸ATCG。eg:ATCGATTCTG则需要10x8 = 80位。因为以上的字符比较特殊,它是只有4个符号组成,那么我们约定:用2位存储来指代上面的其中一个符号,则就能达到节省空间的目的。eg:A:00 T:01 C:10 G:11那么上述字符串就能压缩成:00011011000101100111,只需要10x2=20位就能完成
2022-05-05 17:18:36
539
原创 斐波那契数列
斐波那契数列除了第一个和第二个数以外,后续的每一位都是前两位之和。如:0、1、1、2、3、4、8、13、21接下来我们来实现:给定一个下标N,取得该下标的斐波那契数列上的值。首先从参数和返回值上分析,斐波那契数列是没有负数的,所以参数和返回值都采用无符号的整型UInt。func fib(n:UInt)->UInt{ if n == 0 { return 0 }else if (n == 1){ return 1 } retur
2022-05-05 11:13:18
435
原创 计算缓存技术
计算缓存技术当我们在求一个结果的时候,会有大量的重复的计算,为了避免系统浪费这些不必要的性能,将相关的结果保存起来,需要用的时候就去查表,这样的思想就是计算缓存技术。常见的比如动态计算UITableViewCell的高度,我们没有必要每次刷到同一个Cell的时候去反复计算相关的高度,对于这样的需求我们只需要用一个数组保存其Cell的高度即可解决在主线程中浪费资源去计算高度了。比如在斐波那契数列递归算法中:原算法:func fib(n:UInt)->UInt{ if (n<2){
2022-05-05 10:01:43
304
原创 关于定位 MapKit 与 CLCoreLoaction
MapKit 用于地图展示Core Location 用于地理定位LBS : location based service 基于定位的服务CoreLocation定位所包含的类都在CoreLocation模块中,使用时必须导入。CLLocationManager:定位管理器,可以理解为定位不能自己工作,需要有个类对它进行全过程管理。CLLocationManagerDelegate:定位管理代理,不管是定位成功与失败,都会有相应的代理方法进行回调。CLLocation:表示某个位置的地理信息,
2022-04-26 10:38:59
225
原创 UISegmentedControl如何使用
模样使用场景当用户输入不仅仅是布尔值时,可使用分段控件(UISegmentedControl)。分段控件提供一栏按钮(有时称为按钮栏),但只能激活其中一个按钮。分段控件会导致用户在屏幕上看到的内容发生变化。它们常用于在不同类别的信息之间选择,或在不同的应用屏幕之间切换。使用流程需要选项卡的一个数组根据选项卡数组初始化创建(frame、selectedindex、color、样式等等,还可以设置置顶选项的宽度,添加点击选项的事件,和按钮的添加事件一样,都是addTarget。...
2022-04-26 10:30:51
421
原创 App内访问网络请求要采用 HTTPS 协议
App内访问网络请求要采用 HTTPS 协议解决办法:1、在Info.plist中添加 NSAppTransportSecurity 类型 Dictionary ;2、在 NSAppTransportSecurity 下添加 NSAllowsArbitraryLoads 类型Boolean ,值设为 YES;
2022-04-24 12:41:00
494
原创 XMPP 01 基础
网络基本结构OSI七层模型:物理层:定义的是设备的标准数据链路层:定义了对比特流的包装网络层:定义了传输的路径传输层:定义了传输数据的协议(常见的各种HTTP、TCP、UDP等等)会话层:定义了收发数据对象的协议表示层:定义了两个终端可识别的协议应用层:用户使用软件的层次网络世界中最重要的就是协议,各种各样的协议。数据传输的时候会用到一个socket套接字协议。套接字工作在传输层到应用层之间。socket本地进程间的通信可以通过PID来确定彼此,然后借由共享内存的方式等来完成通信。
2022-03-27 18:27:18
5492
原创 CoreData相关04 多个数据库
多个数据库一般来说你可以把所有的表都放在一个数据库里,但那样不容易管理。我们更多的情况是,针对不同的模型来设计数据库。在上一个案例中,已经有一个含有Person与Country两个表的数据库,现在我们再新增一个数据库为School。现在的情况相当于我们有两个数据库了,所以我们创建上下文的方式也需要做一些改变,不然的话,就有可能会出现student表放在别的数据库的情况。代码的这个位置如果传入的是nil的话,那么就会将所有的的文件都关联到同一个model中,这就会出现student表和person、c
2022-03-07 15:12:50
3317
原创 CoreData相关03 表关联
表关联比如企业下有众多部门,而员工属于某一个部门,则在员工表与部门表之间产生了关联。在上一篇文章中已经有一张“Person”表了,现在创建一个“国家”表“Country”添加关联然后把person类都删掉,重新生成一下person类文件。重新生成后,就可以发现多出了关联的那个属性了。添加关联数据- (void)addPersonAndCountry{ Person* person = [NSEntityDescription insertNewObjectForEntityForN
2022-03-04 23:21:51
2878
原创 CoreData相关02 基础及运用:删除、修改、模糊查询
删除条目在上一篇文章中,可以发现有0岁的条目:2022-03-04 16:27:23.552477+0800 CoreData实践1[72820:3059276] personName:personSomeone5009 age:0系统想要将这些age = 0 的条目删掉。其基本的操作是:找到 age = 0 的条目删除这些条目用上下文保存- (void)deleteSomeoneAge:(int64_t)age{ //创建请求对象(填入的是表名称) NSFetchReq
2022-03-04 18:26:59
568
原创 CoreData相关01 基础及运用:添加、查询、过滤、排序、分页
CoreDataCoreData中几乎不用写数据库操作语句就能完成数据的本地化存储。CoreData和iOS中的模型对象相联系在一起,只需要操作模型对象的增删改查就可以完成数据的增删改查,不用写SQL语句。CoreData的存储方式SQLite NSSQLiteStoreTypeXML NSXMLStoreTypeBinary NSBinaryStoreType内存存储 NSInMemoryStoreTypeCoreData的核心对象NSManagedObjectContext 用途:负
2022-03-04 16:33:45
6129
原创 斯坦福Stanford公开课2017年版CS193p课程iOS11开发01-翻牌游戏
翻牌游戏老师主要运用的是storyboard来编写程序,但说实话,真的用起来很不习惯。还是用回纯代码编写吧。主要知识点:观察属性@objc标签class ViewController: UIViewController { var count = 0 { didSet{ scoreLabel.text = "消耗步数:\(count)" } } let fruitKindArray = ["🍎","🍉"
2022-03-02 22:17:15
3998
原创 swift3.0项目xcode10.1迁移错误
打开一些老项目的时候,发现swift版本不兼容,提示:利用xcode10.1打开之后,报错:解决方式:将:libMainThreadChecker.dylib改名为:libMainThreadChecker.dylib.00参照上面Xcode问题报告中,显示详情信息里的地址:可得知libMainThreadChecker.dylib是在软件包里面,所以进入到内部路径修改名字即可。修改完毕之后,再次打开就可运行了。...
2022-02-21 18:10:52
858
原创 iPhone开发Swift基础09 Assets
Assets上设置颜色集合使用颜色集合可以使得应用程序的风格一致。选取颜色接着在代码里面使用:由于颜色集是iOS11才出现的新特性,所以使用时需要进行系统版本判断。if #available(iOS 11.0, *){ self.view.backgroundColor = UIColor(named: "ForegroundColor")}运行结果:Assets上设置矢量图片在过去的开发,因为需要适配不同尺寸的屏幕,因此图片资源经常需要准备三种尺寸@1x、@2x、@3x。
2022-02-12 15:13:54
1401
原创 iPhone开发Swift基础08 加密与安全
三种常见的加密技术:3DES、SHA1、MD5。其中3DES和SHA1为对称加密,MD5为非对称加密。加密我们可以做的加密措施有哪些?对设备中存储的内容进行加密,开发者经常使用的UserDefaults、plist文件、CoreData框架等作为存储数据的载体,在存入数据之前做一些加密以增强数据的安全性是很有必要的。对网络传输的数据进行加密,大部分的引用都需要进行网络通讯,由于网络传输的过程中的一些中间节点并不可控,所以必然存在着数据泄漏的风险,对敏感信息进行加密以保证用户的隐私权是很有必要的。
2022-02-12 12:03:07
4358
原创 安装cocoapods的参考 很实用
由于国内的网络环境原因,有些网站或者ip是国内访问不到的,下面这篇文章转送门可以让开发者节省一些寻求解决办法的时间:作者wjwdive记录一次安装cocoapods的过程下面摘录一些重要的信息,以免原链接访问不到。安装顺序是这样的安装cocoaPods需要ruby环境,ruby的管理需要nvm,nvm的升级需要homebrew.homebrew的升级依赖外网。所以我们这样做1、安装或升级homebrew2、安装或更新ruby,选择较新版本3、安装cocoaPods使用中科大镜像安装或升级
2022-02-10 18:55:09
874
原创 iPhone开发Swift基础07 内存泄漏检测
InstrumentsInstruments工具是用于动态跟踪和分析代码的工具,可以跟踪一个或者多个进程,并检测收集实时数据,使开发者更好地理解应用程序和操作系统的行为和性能。追查代码中难以重现的问题对应用程序进行性能分析自动化测试应用程序中的代码对应用程序进行压力测试进行一般的系统级故障诊断对应用程序的代码如何工作有更加深入的了解AllocationsInstruments中的Allocations工具可以显示内存中的对象占用曲线,内存当前都分配给那些对象、被分配内存对象数量以及由哪
2022-01-09 14:08:23
1932
原创 iPhone开发Swift基础06 单元测试和界面测试
测试的重要性应用要是想要上架苹果商店,就必须通过苹果商店的审查,如果应用程序没有经过测试就提交的话,那么在审核时发现不符合上架条件的情况,就会被拒绝上架,这样就会造成很不必要的时间等待成本。单元测试单元测试是一种白盒测试,应用程序的开发者对现有的模块编写相应的测试代码进行测试,其中包含测试用例的设计。单元测试是通过XCTest框架对程序的最小单元进行正确性检测的测试工作的。最小可测试部件通常包括基类、抽象类、子类。新建的项目要想使用单元测试,只需要在创建项目时勾选Unit Test 选项即可。但
2022-01-09 01:25:50
825
原创 iPhone开发Swift基础05 数据持久化 CoreData
iOS中的数据持久化方式有4种:plist属性列表对象归档SQLite3Core DataPlistplist文件主要是以键值对的方式存储属性、配置信息,也可以用于存储项目中的业务数据。我们常用的UserDefaults类其实也是用plist文件进行存储的。解析Plist//组织plist文件地址let configPlistPath : String = Bundle.main.path(forResource: "bomsConfig", ofType: "plist")!//通
2022-01-05 17:47:23
2422
原创 CoreData报错 托管对象路径调整所引起的报错
在完成实体Entity的创建之后,接着便就是创建托管对象。Editor > Create NSManagedObject subclass .但创建完后运行却出现了报错。其中我猜测可能是因为我没有在默认的路径上创建文件。解决方式:只需要删除Build Phases中的Compile Sources下对应的(.m文件或者.xcdatamodeld源文件)其中一个就行。...
2022-01-04 17:48:22
1207
2
原创 iPhone开发Swift基础04 WKWebView与Html5 未完待续
主要介绍如何使用UIWebView网页视图和Html标签、CSS样式表、JavaScript语言等Html5相关技术。相对于原生应用,Html5具有以下优点:一次编写,到处运行。在服务器完成更新部署。不可避免的有得有失,Html5应用相比原生应用而言,在流畅性、访问设备硬件便利性、用户体验等方面时有差距的。因此在iOS开发中,权衡利弊下,采用混合开发的模式,用原生技术创建不经常改变的布局页面和功能,用Html5创建需要实时变化的页面和功能。比如在开发营销管理系统时,大部分页面和功能都采用原生
2021-12-25 17:06:30
270
原创 iPhone开发Swift基础03 视频、网络请求
视频播放AVPlayeriOS9之前使用的是MPMoviePlayerController,随着iOS不断迭代,AVPlayer成为主流。往项目中添加资源文件:import UIKitimport AVFoundationclass ViewController: UIViewController{ var avPlayer : AVPlayer? override func viewDidLoad() { super.viewDidLoad()
2021-12-25 13:55:42
2105
原创 面试需要注意
简历准备简历要简洁,一张A4纸的篇幅就足够了。重要的信息不要遗漏:各种联系方式、毕业院校、专业等。与其罗列工作经验,不如展示你的工作能力、学习能力。不要写虚假夸大的信息,面试的时候实事求是。简历的格式最好还是pdf的。面试机会新人最好还是先经历面试,积累一些职场经验。最好的面试机会是内推,可以更加了解目标公司的团队和工作内容。招聘网站(因为接收简历的量大,所以HR会更严格)面试流程事先先准备好简短的3~5分钟的自我介绍,最好就背下来,根据对方公司招聘的重点,着重介绍自己与目标
2021-12-23 19:27:06
241
原创 iPhone开发Swift基础02 触控、动画、声音
UIResponder继承自UIResponder的对象可以接收4个触屏事件:touchesBegan 控件内按下触发touchesMoved 控件上滑动触发touchesEnded 滑出控件触发touchesCancelled 系统中断(断电、来电等)触发的取消通过该方法传入的参数UITouch对象,可以获得点击的对象、位置、事件、次数、压力等等的数值。UIGestureRecognizerUIPanGestureRecognizer 拖动UIPinchGestureReco
2021-12-22 23:39:28
1639
原创 iOS基础 UIWindow
本文是从Objective-C过渡到Swift的文章,主要记录一些与oc时代开发相区别、和一些自己平时不大留意的知识点,但对面试都有很大的帮助。写在前面的一些学习备忘除了基础的iOS学习外,随着每个版本的发布,越来越多的新功能新特性加入其中,其中有:可调用siri机器学习Core MLAR 增强现实Core NFC同一局域网下的无线真机调试等等iOS应用程序的状态5种状态:未运行 Not Running未激活 Inactive 有在运行,但没法接收事件,如锁屏、响应来电等。已
2021-12-21 14:56:01
505
原创 iOS基础 应用程序的状态 与 UIApplication
闭包闭包是用大括号括起来的,可以没有名字的函数类型的实例。闭包有三种形式:全局函数:具名函数,但不捕获任何值嵌套函数:在函数内部嵌套定义具名函数,可捕获包含函数中的值。闭包表达式:匿名函数类型的实例,不具名代码块,可捕获上下文中的值。闭包是引用类型,闭包变量的拷贝具有引用语义。闭包和函数实例具有同样的内存模型。表达式:{(参数列表1,参数列表2,...)->(返回值) in 函数体执行的内容}示例:var closure = {(number1:Int,number2
2021-12-18 01:19:57
1196
原创 Swift基础 错误的捕获和处理
类的声明格式:class 类名 : 父类名 { 数据成员(变量)定义 函数成员(方法)定义和实现}案例:class Person { var name : NSString var height : CGFloat var sex : NSString init() { name = "" height = 0.0 sex = "男" }}override func viewD
2021-12-17 12:40:52
1456
原创 Swift基础 关于学习Swift的参考资料
基础本文用于记录和介绍与objective-c相区别的部分,相关的基础知识就不赘述。常量程序运行期间,值不可改变的量。 let word = "hello world" let 常量名 = 值变量可变化的数据。 var word = "hello world" var 变量名 = 值声明变量的数据类型: var year : Int元组将不同类型的字面值用括号括起来的元素。 let student = (2021,"xiaoMing",1
2021-12-13 15:32:40
741
原创 三种枚举方式
普通枚举typedef enum{ PersonDoctor, PersonTeacher}Person;这样定义的枚举的值,首位是0,后续依次加1,在此例,PersonDoctor的值为0,PersonTeacher为1。位移枚举typedef enum { PersonDoctor = 1<<0, // 0b0001 PersonTeacher = 1<<1, // 0b0010} Person;这样定义的枚举的值,往后1
2021-12-04 19:50:01
287
原创 多线程相关 NSOperation
NSOperationNSOperation是苹果对GCD的一个封装类。配合NSOperation和NSOperationQueue也能实现多线程编程。其使用过程是,将需要操作的任务封装到NSOperation对象当中,再将NSOperation对象添加到NSOperationQueue队列中。后续的系统会像GCD那样自动去管理。NSOperation是一个抽象类,所以不能直接创建对象,我们使用时必须使用NSOperation的子类:NSInvocationOperationNSBlockO
2021-12-02 23:35:14
231
原创 SEL数据类型
SELSEL是一种数据类型,表示的是方法的存储位置。假设有一个Person类,实例化该类后就有了person对象,那么每个对象都会有一个isa指针指向该类的代码存储区。在代码存储区中,会有SEL包装过的一些方法的调用地址,通过SEL指向的地址来调用该具体的方法。用下代码来解释,也许会更清晰点: SEL func = @selector(stringByAppendingString:); NSString* abc = @"abc"; abc = [abc performSelect
2021-12-02 18:40:09
1852
原创 OC基础 Block
什么是BlocksBlocks是C语言的扩充功能。可以概括为:带有自动变量(局部变量)的匿名函数。所谓的匿名函数,就是没有名字的函数,在C语言中是不允许的。在计算机科学中,这种概念也称为:“闭包Closure”、“lambda计算”等。而且一般而言,函数或者方法里是不能又出现一个函数的,但是Blocks作为一种数据类型,是可以的。通常Blocks用于封装代码。因为即便是写在函数体内部,不去调用它,就不会执行。Blocks的声明//无参数 无返回值 void (^block1)(void)
2021-12-02 12:02:04
1908
XGColletcionView
2015-09-13
libqrencode
2015-05-25
framework-RegexKitLite
2015-03-01
RegularExpression04
2015-03-01
RegularExpression03
2015-03-01
RegularExpression02
2015-03-01
RegularExpressionCode01
2015-03-01
getScreenViewCode
2015-02-25
Quartz2D-根据路径绘制
2015-02-25
cutPictureCode
2015-02-25
WaterMakeImageCode
2015-02-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅