Swift开发常用知识点
#pragma mark - as/类型转换
as? / as! 需要根据前面的返回值决定 有?证明可选,可能为空:需要弱解包 没有?证明一定有值:大胆解包
as? 前面的结果是可选的 if let / guard let 一定用as?
 as! 前面的结果一定有值
 as  NSString -> String / NSArray -> [] NSDictionary -> [] 因为底层做了结构体和OC对象的桥接
 什么时候需要类型转换
 1、将父类转换为子类
 2、因为子类的属性和方法比父类多
 3、转化有风险、如果没有对应的属性和方法会崩溃
4、参与计算的变量需要使用 "!解包" 因为参与计算 必须要保证有值
#pragma mark - JSON序列化
 Swift开发中JSON序列化会发生异常有三种处理方式
 一:try? 解析成功就有值 失败为nil  (推荐使用guard守护一下就可以了)
 guard let json = try? JSONSerialization.jsonObject(with: data!, options: [])
 
 二: try! 成功有值 失败崩溃(一定不要使用)
 let json2 = try! JSONSerialization.jsonObject(with: data!, options: [])
 
 三: 处理异常能够接收到错误信息 可以打印出来
 do {
	 let json3 = try! JSONSerialization.jsonObject(with: data!, options: [])
	 print(json3)
 } catch {//可以使用三方检测收集
 	print(error)
 }
#pragma mark - 定义模型
1、定义模型的时候,如果是对象,其属性通常是可选的 (不用写构造函数,在需要的时候创建)
 --如果是基本数据类型,不能是可选的,需要定义的时候设置初始值,否则KVC会崩溃
 --private 类型的属性/方法 通过KVC不能赋值(崩溃) 是禁止外界访问的
 使用KVC的方法(本质是OC的方法,再运行时给对象发消息)之前 应该调用super.init 保证对象实例化完成
 OC开发 当字典中的键值对比模型中多的时候 需要重写 setValue:forUndefinedKey告诉系统找不到对应发键值对应该怎么办
 
#pragma mark - "必选属性" 开发中极少用到
下面的例子表示 创建对象的时候name一定有值不能为空
 override init() {
 //需要再调用super.init 方法之前为本类属性分配空间并且初始化
    self.name = "张三"
 
    super.init()
 }
 
 构造函数基础  :相当于OC中的alloc init
 重载构造函数  : 函数名称相同 参数类型和个数不同
 KVC构造函数  :对象的属性为可选/基本数据类型为必选,赋初始值/使用kvc赋值的属性不能为private
 遍历构造函数  :判断条件/convenience
 析构函数deinit :OC中的dealloc
 
#pragma mark - 便利构造函数(不负责对象的创建,所以能够返回nil)  开发中使用很少,都是用第三方框架
    不能被重写,不能调用super
    为控件创建分类的时候使用的
 
 //1. 便利构造函数允许返回nil
      正常的构造函数一定会创建对象
      判断给定的参数是否符合条件,如果不符合条件,直接返回nil,不会创建对象,减少内存开销
 //2. 只有便利构造函数中使用  self.init()  构造当前对象
      有 convenience 关键字的构造函数用来检查条件的,不负责对象的创建
 //3. 在便利构造函数中使用当前对象的属性,一定要在self.init() 之后
 
 convenience init?(name: String, age: Int) {
 if age > 200 {
 return nil
 }
 
 //实例化当前对象
 self.init() 注意:--->是self不是super
 //执行到此处 self 才允许被访问,才能够访问到对象的属性
 self.name = name
 }
%取余结果的正负只跟%左边的正负有关 而且可以对小数取余(OC不可以)
模糊效果
iconImageView.image = UIImage(named: "1.png")
//效果类实例
let blurEffect = UIBlurEffect(style: .light)
//效果视图类的实例
let visualEffectView = UIVisualEffectView(effect: blurEffect)
visualEffectView.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: UIScreen.main.bounds.size.height)
//添加到背景图像(告诉系统imageView需要按照上述条件进行模糊化实现)
imageView.addSubview(visualEffectView)
//view.addSubview(visualEffectView) 添加到控制器的view上,所有添加到view上的视图都会被模糊化
更多内容--> 博客导航 每周一篇哟!!!
有任何关于iOS开发的问题!欢迎下方留言!!!或者邮件lieryangios@126.com 虽然我不一定能够解答出来,但是我会请教iOS开发高手!!!解答您的问题!!!
Swift开发常用知识点的更多相关文章
- IOS&swift开发常用的网站
		
swift转OC:http://iswift.org/try OC转swift:https://www.myappconverter.com/ swift语言视频:http://space.bilib ...
 - Android快速开发常用知识点系列目录
		
项目构建 Android项目目录结构模板以及简单说明[简单版] Android Studio配置统一管理依赖版本号引用 Android多Module下的Application引用方式 APP开篇 An ...
 - Web开发常用知识点 - PHP
		
Ubuntu下面,如何用PHP代码获得系统的临时文件夹 用PHP方法 sys_get_temp_dir() 来取得系统的临时文件夹路径,比如Ubuntu下面,返回值为"/tmp".
 - swift开发常用代码片段
		
// 绑定事件 cell.privacySwitch.addTarget(self, action: #selector(RSMeSettingPrivacyViewController.switch ...
 - Java开发常用知识点总结
		
docker exec -it imageId redis-cli docker container ls -a docker rm containerId 复制目录&文件 cp -r /ro ...
 - iOS开发——实用篇Swift篇&项目开发常用实用技术
		
项目开发常用实用技术 实现拨打电话 要实现打电话功能,最简单最直接的方式便是:直接跳到拨号界面 (注意:这个需要真机调试,模拟器无效果) UIApplication.sharedApplica ...
 - 前端开发面试知识点大纲--摘自jackyWHJ
		
前端开发面试知识点大纲:HTML&CSS: 对Web标准的理解.浏览器内核差异.兼容性.hack.CSS基本功:布局.盒子模型.选择器优先级及使用.HTML5.CSS3.移动端适应 Ja ...
 - 《Swift开发指南》
		
<Swift开发指南> 基本信息 作者: 关东升 赵志荣 丛书名: 图灵原创 出版社:人民邮电出版社 ISBN:9787115366245 上架时间:2014-8-5 出版日期:20 ...
 - JAVA常用知识点及面试题总结
		
1. String.StringBuffer.StringBuilder三者区别? (1)三者在执行速率上的比较: String<StringBuffer<StringBuilder 原因 ...
 
随机推荐
- 关于TOE(TCP/IP Offload Engine)
			
前言 昨天在电脑上抓取的报文,想进行回话,但是发现全部被设备丢弃了,没有debug信息,查看了抓包文件,原来是IP头和TCP.UDP头的检验和全部为0,也就是TOE(TCP/IP Offload En ...
 - MyBatis之简单了解Plugin
			
MyBatis的Configuration配置中有一个Plugin配置,根据其名可以解释为"插件",这个插件实质可以理解为"拦截器"."拦截器&quo ...
 - ztree实现权限功能(横向显示)
			
最近在做权限功能的时候,采用的ztree实现的,但是产品要求最后一层的权限节点要横向显示.开始在网上找的解决方案是用css样式把最后一层的display设置为inline.在我本地电脑上看了下.效果不 ...
 - 018 关联映射文件中<class>标签中的lazy(懒加载)属性
			
Lazy(懒加载): 只有在正真使用该对象时,才会创建这个对象 Hibernate中的lazy(懒加载): 只有我们在正真使用时,它才会发出SQL语句,给我们去查询,如果不使用对象则不会发SQL语句进 ...
 - SharePoint 无法删除搜索服务应用程序
			
在SharePoint的使用中,经常会遇到某些服务创建失败,某些服务删除不成功的情况.这里,我们就遇到了搜索服务创建失败,然后删除也不成功,使用管理中心的UI无法删除,PowerShell命令也无法删 ...
 - 浅谈MVC数据验证
			
一.一般情况 对于使用过MVC框架的人来说,对MVC的数据验证不会陌生,比如,我有一个Model如下: public class UserInfo { [Required(ErrorMessage = ...
 - Warning: session_start() [function.session-start]: Cannot send session cache limiter
			
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers alrea ...
 - Java File类应用:递归遍历文件夹和递归删除文件
			
要求: 1)采用递归遍历文件夹下的所有文件,包括子文件夹下的文件 2)采用递归删除文件下的所有文件 注意: 以下递归删除文件的方法,只能删除文件,所有的文件夹都还会存在 若要删除正文文件夹,可以在递归 ...
 - Java之枚举----小试牛刀练习
			
1.定义一个电脑品牌枚举类,其中只有固定的几个电脑品牌. 1.1简单枚举类,不设置属性和方法 package 第十四章枚举; public enum Brand { Lenovo,Dell,Accer ...
 - css中那些容易被我们程序猿所忽略的选择器
			
css中那些容易被我们程序猿所忽略的选择器 作为一个程序猿,我们可能会遇到这样的问题,假如:有5个li,要求给第三个li设置背景颜色怎么办?有人会说,用JS啊,循环遍历出第三个不就行了.但是,用JS解 ...