博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift3.0 功能一(持续更新)
阅读量:4600 次
发布时间:2019-06-09

本文共 5225 字,大约阅读时间需要 17 分钟。

修改项目名称两种方式

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+maxXpicCollectionView.frame.maxX// 获取maxY->控件+frame+maxYpicCollectionView.frame.maxY

监听键盘通知

1.添加通知

这里写图片描述

2.键盘通知实现方法

这里写图片描述

3.打印信息

这里写图片描述

转载于:https://www.cnblogs.com/Free-Thinker/p/6373123.html

你可能感兴趣的文章
(9)模板层 - templates(模板语言、语法、取值、过滤器、变量的使用)
查看>>
P3469 [POI2008]BLO-Blockade
查看>>
P1171 售货员的难题
查看>>
DevOps之持续交付
查看>>
有趣的数学(一)
查看>>
迟来的2013年总结及算法工程师/研究员找工作总结
查看>>
java面向对象中的关键字
查看>>
网络类型IPv4和IPv6什么意思?区别?
查看>>
6周学习计划,攻克JavaScript难关(React/Redux/ES6 etc.)
查看>>
大对象堆及.NET垃圾回收器的改进
查看>>
utf-8引发的页面空白
查看>>
MicroPHP 2.2.0 发布
查看>>
Mysql 语句
查看>>
setState 和 bloc 是仇家
查看>>
jmeter之IP欺骗
查看>>
Ubuntu配置OpenStack 二:配置时间同步NTP和安装数据库Maridb以及问题总结
查看>>
zepto源码--compact、flatten、camelize、dasherize、uniq--学习笔记
查看>>
MyCat:开源分布式数据库中间件
查看>>
递归方法,多维变一维数组
查看>>
#pragma once
查看>>