修改项目名称两种方式

1.Bundle name
2.Bundle display name


try 三种处理异常的方式

//  在swift中提供三种处理异常的方式
// 方式一:try方式 程序员手动捕捉异常
do {
try NSJSONSerialization.JSONObjectWithData(jsonData, options: .MutableContainers)
} catch {
// error异常的对象
print(error)
} // 方式二:try?方式(常用方式) 系统帮助我们处理异常,如果该方法出现了异常,则该方法返回nil.如果没有异常,则返回对应的对象
guard let anyObject = try? NSJSONSerialization.JSONObjectWithData(jsonData, options: .MutableContainers) else {
return
} // 方式三:try!方法(不建议,非常危险) 直接告诉系统,该方法没有异常.注意:如果该方法出现了异常,那么程序会报错(崩溃)
let anyObject = try!NSJSONSerialization.JSONObjectWithData(jsonData, options: .MutableContainers)

封装TabBar创建自控制器

//调用封装方法
addChildViewController(LXRHomeViewController(), title: "首页", imageName: "tabbar_home")
addChildViewController(LXRMessageViewController(), title: "消息", imageName: "tabbar_message_center")
addChildViewController(LXRDiscoverViewController(), title: "发现", imageName: "tabbar_discover")
addChildViewController(LXRProfileViewController(), title: "我", imageName: "tabbar_profile") // Swift支持方法的重改:方法名称相同.但是参数类型和个数不同
// private在当前文件中可以访问,其他文件不能访问
// swift3.0 private建议修改为fileprivate
private func addChildViewController(_ childVc: UIViewController, title : String, imageName : String) {
//1.设置自控制器的属性
childVc.title = title
childVc.tabBarItem.image = UIImage(named: imageName)
childVc.tabBarItem.selectedImage = UIImage(named: imageName + "_highlighted")
//2.包装导航控制器
let childNav = UINavigationController(rootViewController: childVc)
//3.添加控制器
addChildViewController(childNav)
}

根据Json文件,通过字符串获取数据

//1.获取JSON文件路径
guard let jsonPath = Bundle.main.path(forResource: "MainVCSettings.json", ofType: nil) else {
LXRLog(message: "没有获取到对应的文件路径")
return
}
//2.读取json文件中的内容
guard let jsonData = try? Data(contentsOf: URL(fileURLWithPath: jsonPath)) else {
LXRLog(message: "没有获取到json文件中数据")
return
}
//3.将Data转成数组
guard let anyObject = try? JSONSerialization.jsonObject(with: jsonData, options: .mutableContainers) else {
return
} guard let dictArray = anyObject as? [[String : AnyObject]] else{
return
}
//4.遍历字典,获取对应的信息
for dict in dictArray{
//4.1获取控制器的对应的字符串
guard let VcName = dict["vcName"] as? String else {
continue
}
//4.2获取控制器显示的title
guard let title = dict["title"] as? String else {
continue
}
//4.3获取控制器显示的图标名称
guard let imageName = dict["imageName"] as? String else {
continue
}
//4.4添加自控制器
addChildViewController(VcName, title: title, imageName: imageName)
} /**************************************************/ // Swift支持方法的重改:方法名称相同.但是参数类型和个数不同
// private在当前文件中可以访问,其他文件不能访问 private func addChildViewController(_ childVcName: String, title : String, imageName : String) { //0.获得命名空间
guard let nameSpace = (Bundle.main.infoDictionary!["CFBundleExecutable"] as? String) else {
LXRLog(message: "没有获取命名空间")
return
}
//1.根据字符创获取对应的Class
guard let ChildVcClass = NSClassFromString(nameSpace + "." + childVcName) else {
LXRLog(message: "没有获取到字符创对应的Class")
return
}
// 2.将对应的AnyObject转成控制器的类型
guard let childVcType = ChildVcClass as? UIViewController.Type else {
LXRLog(message: "没有获取对应控制器的类型")
return
}
// 3.创建对应的控制器对象
let childVc = childVcType.init() //4.设置自控制器的属性
childVc.title = title
childVc.tabBarItem.image = UIImage(named: imageName)
childVc.tabBarItem.selectedImage = UIImage(named: imageName + "_highlighted")
//5.包装导航控制器
let childNav = UINavigationController(rootViewController: childVc)
//6.添加控制器
addChildViewController(childNav)
}

代码创建Window

 // 1.创建Window  UIScreen.main.bounds屏幕尺寸
window = UIWindow(frame: UIScreen.main.bounds)
window?.rootViewController = LXRMainTabBarController()
window?.makeKeyAndVisible()

便利(convenience)构造函数

便利构造函数通常用在对系统的类进行构造函数的扩充时使用

便利(convenience)构造函数的特点:

1.便利构造函数通常都是写在 extension 里面
2.便利构造函数init前面加上 convenience
3.在便利构造函数中需要调用self.init()


Selector参数两种写法:

1.Selector(“方法名”)

2.”方法名”

3.swift3.0版本#selector(类名.方法名)

事件监听本质:

1.将方法包装成@SEL->类中查找方法列表->根据@SEL找到imp指针(函数指针)->执行函数

2.注意:swift中将一个函数声明成fileprivate,那么该函数不会被添加到方法列表中

3.如果在fileprivate前面加上@objc,那么该方法仍然会被添加到方法列表中


Swift限定作用域访问级别

swift 3.0 之前,swift 提供3种不同的访问级别

1.public(公开)

2.internal(内部)–>系统默认

3.private(私用)

swift 3.0 private 将会被重新命名为 fileprivate

1.public(公开)

2.internal(内部)

3.fileprivate文件内私有)

4.private(私有)


设置图片拉伸

弹簧动画效果

/**
* Duration: 持续时间
* delay: 延迟
* Damping: 阻力系数(0~1),越大效果越不明显
* Velocity: 速度
* options: 速度枚举
* animations: 动画
* completion: 完成
*/
UIView.animate(withDuration: TimeInterval, delay: TimeInterval, usingSpringWithDamping: CGFloat, initialSpringVelocity: CGFloat, options: UIViewAnimationOptions, animations: () -> Void, completion: ((Bool) -> Void)?((Bool) -> Void)?(Bool) -> Void)

Swift中??的作用

1.如果??前面的可选类型有值,那么将前面的可选类型进行解包并且赋值.

2.如果??前面的可选类型为nil,那么直接使用??后面的值.

let iconViewUrl = LXRAccountTool.shareInstance.account?.avatar_large ?? ""

Swift中self使用场景

注意: 两个地方需要使用self

1>如果在一个函数中出现歧义.

2>在闭包中使用当前对象的属性和方法也需要使用self


动态设置tableViewCell高

必须实现的两个设置!!!

1.设置自动尺寸

2.设置估算高度

///5.设置行高
//自动尺寸
self.tableView.rowHeight = UITableViewAutomaticDimension
//估算高度
self.tableView.estimatedRowHeight = 200

storyBoard快捷键

约束控件更新布局->快捷键

cmd + option(alt) + =

图片真实大小显示->快捷键

cmd + =


获取控件最大X.Y值

// 获取maxX->控件+frame+maxX
picCollectionView.frame.maxX
// 获取maxY->控件+frame+maxY
picCollectionView.frame.maxY

监听键盘通知

1.添加通知

2.键盘通知实现方法

3.打印信息

Swift3.0 功能一(持续更新)的更多相关文章

  1. Swift3.0 功能二 (表情键盘与图文混排)

    随着iOS越来越多表情键盘以及图文混排的需求,本文运用Swift3.0系统的实现其功能以及封装调用方法,写的不好,如有错误望各位提出宝贵意见,多谢 项目源码地址: 相关知识点都有标识 项目源码地址 废 ...

  2. javascript/jquery 常见功能实现(持续更新...)

    1. input 只能输入整数数字和字母 $(document).on('keyup','#no',function(){ var val = $.trim($(this).val()); if(va ...

  3. oracle学习 五 使用存储过程创建一个重置密码为123456的功能(持续更新中)

    首先写一个函数是MD5的方法 create FUNCTION GET_MD5 ( p_str in varchar2) RETURN varchar2 IS BEGIN RETURN Utl_Raw. ...

  4. RedHat 和 Mirantis OpenStack 产品的版本和功能汇总和对比(持续更新)

    Mirantis 和 Red Hat 作为 OpenStack 商业化产品领域的两大领军企业,在行业内有重要的地位.因此,研究其产品版本发布周期和所支持的功能,对制定 OpenStack 产品的版本和 ...

  5. 私人网盘系统2.0—全部升级为layUI+PHP(持续更新中)shang

    网盘系统2.0   上周,我做了第一版的“私人网盘系统”,http://www.cnblogs.com/sunlizheng/p/7822036.html 没看过的朋友可以去看一下,这周在家升级做了第 ...

  6. ASP.NET MVC深入浅出系列(持续更新) ORM系列之Entity FrameWork详解(持续更新) 第十六节:语法总结(3)(C#6.0和C#7.0新语法) 第三节:深度剖析各类数据结构(Array、List、Queue、Stack)及线程安全问题和yeild关键字 各种通讯连接方式 设计模式篇 第十二节: 总结Quartz.Net几种部署模式(IIS、Exe、服务部署【借

    ASP.NET MVC深入浅出系列(持续更新)   一. ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态模 ...

  7. Swift3.0 更新后出现比较运算符方法

    在将项目更新到swift3.0之后,在一些controller头部会出现 比较运算符的方法 // FIXME: comparison operators with optionals were rem ...

  8. C#、Java中的一些小功能点总结(持续更新......)

    前言:在项目中,有时候一些小的功能点,总是容易让人忽略,但是这些功能加在项目中往往十分的有用,因此笔者在这里总结项目中遇到的一些实用的小功能点,以备用,并持续更新...... 1.禁用DataGrid ...

  9. [0]尝试用Unity3d制作一个王者荣耀(持续更新)->游戏规划

    太得闲了于是想写个农药,虽然可能会失败但是还是要试一试. 因为是自学的不是Unity专业的可能表达语言会有些不标准!望见谅! 结构: 以组件式(比如说摇杆控制和玩家部分的编写是分离的,可以自由拼装)作 ...

随机推荐

  1. pidof---查找指定名称的进程的进程号id号。

    pidof命令用于查找指定名称的进程的进程号id号. 语法 pidof(选项)(参数) 选项 -s:仅返回一个进程号: -c:仅显示具有相同“root”目录的进程: -x:显示由脚本开启的进程: -o ...

  2. WPF MVVM架构 EF、WCF、IOC 设计示例经典

    概要 该演示项目利用WPF应用程序构建的MVVM架构示例, 运用了Unity容器接口注入, MVVM的经典设计, 后台利用的EF+WCF. 后台实现: 从数据库生成的emdx 结合上下文进行数据交互, ...

  3. C# XML类学习整理(待补)

    一.读取xml文件内容: #region "获取xml文件内容" //将xml文件加载进来 XDocument xdoc = XDocument.Load("F:\\6. ...

  4. 使用maven的tomcat:run进行web项目热部署

    近期又又一次看了一下maven的东西,事实上主要是由于去了解Jenkins,后期或许会补充jenkins的博文. 怎么在eclipse里面创建maven webproject,这边就不介绍了,參见:h ...

  5. DOM和SAX是应用中操纵XML文档的差别

    查看原文:http://www.ibloger.net/article/205.html DOM和SAX是应用中操纵XML文档的两种主要API.它们分别解释例如以下:          DOM.即Do ...

  6. Windows 98 二十岁了,这些功能都是从它开始的(虽然 Windows 98 不如 Windows 95 那样具有革命性,但完成度更高,更加成熟。到最后还是:相见不如怀念。)

    1998 年 6 月 25 日午夜,美国著名连锁零售店 CompUSA 门外挤满了狂热的消费者和媒体,他们在等待一款软件发售:Windows 98,即使明知它要到当天早上才正式上市. ▲ 在 Comp ...

  7. 1.3 Quick Start中 Step 7: Use Kafka Connect to import/export data官网剖析(博主推荐)

    不多说,直接上干货! 一切来源于官网 http://kafka.apache.org/documentation/ Step 7: Use Kafka Connect to import/export ...

  8. qt多线程

    为什么要用多线程? 传统的图形用户界面应用程序都只有一个执行线程,并且一次只执行一个操作.如果用户从用户界面中调用一个比较耗时的操作,当该操作正在执行时,用户界面通常会冻结而不再响应.这个问题可以用事 ...

  9. VUE错误记录 - 小球模拟购物车

    <body> <div id="app"> <input type="button" value="Add to Car ...

  10. 自定义Base 64加密

    一.前言 最近做软件需要一个功能,就是对文件进行加密.本来嘛,加密算法一堆一堆的,但是试了几个成熟的加密算法后发现对文件进行加密需要的时间很长,特别是上G的文件,这样客户是接受不了的.最后没办法了,好 ...