Swift3.0 功能一(持续更新)

来源:互联网 发布:淘宝号实名认证几个 编辑:程序博客网 时间:2024/05/29 08:19
http://blog.csdn.net/ios_qing/article/details/52812187ttp://blog.csdn.net/ios_qing/article/details/5281218
http://blog.csdn.net/ios_qing/article/details/52812187
修改项目名称两种方式

1.Bundle name 
2.Bundle display name 
这里写图片描述


try 三种处理异常的方式

<code class="language-Objc hljs cs has-numbering" style="display: block; padding: 0px; background: transparent; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//  在swift中提供三种处理异常的方式</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//  方式一:try方式 程序员手动捕捉异常</span>        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">do</span> {                <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">try</span> NSJSONSerialization.JSONObjectWithData(jsonData, options: .MutableContainers)            } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">catch</span> {                <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// error异常的对象</span>                print(error)            }<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//  方式二:try?方式(常用方式) 系统帮助我们处理异常,如果该方法出现了异常,则该方法返回nil.如果没有异常,则返回对应的对象</span>    guard <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">let</span> anyObject = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">try</span>? NSJSONSerialization.JSONObjectWithData(jsonData, options: .MutableContainers) <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> {        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>    }<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//  方式三:try!方法(不建议,非常危险) 直接告诉系统,该方法没有异常.注意:如果该方法出现了异常,那么程序会报错(崩溃)</span>     <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">let</span> anyObject = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">try</span>!NSJSONSerialization.JSONObjectWithData(jsonData, options: .MutableContainers)</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li></ul>

封装TabBar创建自控制器

<code class="language-Objc hljs cs has-numbering" style="display: block; padding: 0px; background: transparent; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//调用封装方法</span>    addChildViewController(LXRHomeViewController(), title: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"首页"</span>, imageName: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"tabbar_home"</span>)    addChildViewController(LXRMessageViewController(), title: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"消息"</span>, imageName: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"tabbar_message_center"</span>)    addChildViewController(LXRDiscoverViewController(), title: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"发现"</span>, imageName: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"tabbar_discover"</span>)    addChildViewController(LXRProfileViewController(), title: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"我"</span>, imageName: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"tabbar_profile"</span>)  <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// Swift支持方法的重改:方法名称相同.但是参数类型和个数不同</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// private在当前文件中可以访问,其他文件不能访问</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// swift3.0 private建议修改为fileprivate</span>    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> func <span class="hljs-title" style="box-sizing: border-box;">addChildViewController</span>(_ childVc: UIViewController, title : String, imageName : String) {        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//1.设置自控制器的属性</span>        childVc.title = title        childVc.tabBarItem.image = UIImage(named: imageName)        childVc.tabBarItem.selectedImage = UIImage(named: imageName + <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"_highlighted"</span>)        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//2.包装导航控制器</span>        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">let</span> childNav = UINavigationController(rootViewController: childVc)        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//3.添加控制器</span>        addChildViewController(childNav)    }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li></ul>

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

<code class="language-Objc hljs cs has-numbering" style="display: block; padding: 0px; background: transparent; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//1.获取JSON文件路径</span>guard <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">let</span> jsonPath = Bundle.main.path(forResource: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"MainVCSettings.json"</span>, ofType: nil) <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> {    LXRLog(message: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"没有获取到对应的文件路径"</span>)    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>}<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//2.读取json文件中的内容</span>guard <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">let</span> jsonData = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">try</span>? Data(contentsOf: URL(fileURLWithPath: jsonPath)) <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> {    LXRLog(message: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"没有获取到json文件中数据"</span>)    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>}<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//3.将Data转成数组</span>guard  <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">let</span> anyObject = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">try</span>? JSONSerialization.jsonObject(with: jsonData, options: .mutableContainers) <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> {    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>}guard <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">let</span> dictArray = anyObject <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">as</span>? [[String : AnyObject]] <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span>{    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>}<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//4.遍历字典,获取对应的信息</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">for</span> dict <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">in</span> dictArray{    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//4.1获取控制器的对应的字符串</span>    guard <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">let</span> VcName = dict[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"vcName"</span>] <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">as</span>? String <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> {        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">continue</span>    }    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//4.2获取控制器显示的title</span>    guard <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">let</span> title = dict[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"title"</span>] <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">as</span>? String <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> {        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">continue</span>    }    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//4.3获取控制器显示的图标名称</span>    guard <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">let</span> imageName = dict[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"imageName"</span>] <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">as</span>? String <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> {        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">continue</span>    }               <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//4.4添加自控制器</span>    addChildViewController(VcName, title: title, imageName: imageName)}<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">/**************************************************/</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// Swift支持方法的重改:方法名称相同.但是参数类型和个数不同</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// private在当前文件中可以访问,其他文件不能访问</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> func <span class="hljs-title" style="box-sizing: border-box;">addChildViewController</span>(_ childVcName: String, title : String, imageName : String) {     <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//0.获得命名空间</span>    guard <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">let</span> nameSpace = (Bundle.main.infoDictionary![<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"CFBundleExecutable"</span>] <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">as</span>? String)  <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> {        LXRLog(message: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"没有获取命名空间"</span>)        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>    }     <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//1.根据字符创获取对应的Class</span>    guard <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">let</span> ChildVcClass = NSClassFromString(nameSpace + <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"."</span> + childVcName)  <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> {        LXRLog(message: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"没有获取到字符创对应的Class"</span>)        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>    }        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 2.将对应的AnyObject转成控制器的类型</span>    guard <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">let</span> childVcType = ChildVcClass <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">as</span>? UIViewController.Type <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> {        LXRLog(message: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"没有获取对应控制器的类型"</span>)        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>    }           <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 3.创建对应的控制器对象</span>    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">let</span> childVc = childVcType.init()   <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//4.设置自控制器的属性</span>    childVc.title = title    childVc.tabBarItem.image = UIImage(named: imageName)    childVc.tabBarItem.selectedImage = UIImage(named: imageName + <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"_highlighted"</span>)    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//5.包装导航控制器</span>    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">let</span> childNav = UINavigationController(rootViewController: childVc)    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//6.添加控制器</span>    addChildViewController(childNav)}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li><li style="box-sizing: border-box; padding: 0px 5px;">39</li><li style="box-sizing: border-box; padding: 0px 5px;">40</li><li style="box-sizing: border-box; padding: 0px 5px;">41</li><li style="box-sizing: border-box; padding: 0px 5px;">42</li><li style="box-sizing: border-box; padding: 0px 5px;">43</li><li style="box-sizing: border-box; padding: 0px 5px;">44</li><li style="box-sizing: border-box; padding: 0px 5px;">45</li><li style="box-sizing: border-box; padding: 0px 5px;">46</li><li style="box-sizing: border-box; padding: 0px 5px;">47</li><li style="box-sizing: border-box; padding: 0px 5px;">48</li><li style="box-sizing: border-box; padding: 0px 5px;">49</li><li style="box-sizing: border-box; padding: 0px 5px;">50</li><li style="box-sizing: border-box; padding: 0px 5px;">51</li><li style="box-sizing: border-box; padding: 0px 5px;">52</li><li style="box-sizing: border-box; padding: 0px 5px;">53</li><li style="box-sizing: border-box; padding: 0px 5px;">54</li><li style="box-sizing: border-box; padding: 0px 5px;">55</li><li style="box-sizing: border-box; padding: 0px 5px;">56</li><li style="box-sizing: border-box; padding: 0px 5px;">57</li><li style="box-sizing: border-box; padding: 0px 5px;">58</li><li style="box-sizing: border-box; padding: 0px 5px;">59</li><li style="box-sizing: border-box; padding: 0px 5px;">60</li><li style="box-sizing: border-box; padding: 0px 5px;">61</li><li style="box-sizing: border-box; padding: 0px 5px;">62</li><li style="box-sizing: border-box; padding: 0px 5px;">63</li><li style="box-sizing: border-box; padding: 0px 5px;">64</li><li style="box-sizing: border-box; padding: 0px 5px;">65</li><li style="box-sizing: border-box; padding: 0px 5px;">66</li><li style="box-sizing: border-box; padding: 0px 5px;">67</li><li style="box-sizing: border-box; padding: 0px 5px;">68</li><li style="box-sizing: border-box; padding: 0px 5px;">69</li><li style="box-sizing: border-box; padding: 0px 5px;">70</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li><li style="box-sizing: border-box; padding: 0px 5px;">39</li><li style="box-sizing: border-box; padding: 0px 5px;">40</li><li style="box-sizing: border-box; padding: 0px 5px;">41</li><li style="box-sizing: border-box; padding: 0px 5px;">42</li><li style="box-sizing: border-box; padding: 0px 5px;">43</li><li style="box-sizing: border-box; padding: 0px 5px;">44</li><li style="box-sizing: border-box; padding: 0px 5px;">45</li><li style="box-sizing: border-box; padding: 0px 5px;">46</li><li style="box-sizing: border-box; padding: 0px 5px;">47</li><li style="box-sizing: border-box; padding: 0px 5px;">48</li><li style="box-sizing: border-box; padding: 0px 5px;">49</li><li style="box-sizing: border-box; padding: 0px 5px;">50</li><li style="box-sizing: border-box; padding: 0px 5px;">51</li><li style="box-sizing: border-box; padding: 0px 5px;">52</li><li style="box-sizing: border-box; padding: 0px 5px;">53</li><li style="box-sizing: border-box; padding: 0px 5px;">54</li><li style="box-sizing: border-box; padding: 0px 5px;">55</li><li style="box-sizing: border-box; padding: 0px 5px;">56</li><li style="box-sizing: border-box; padding: 0px 5px;">57</li><li style="box-sizing: border-box; padding: 0px 5px;">58</li><li style="box-sizing: border-box; padding: 0px 5px;">59</li><li style="box-sizing: border-box; padding: 0px 5px;">60</li><li style="box-sizing: border-box; padding: 0px 5px;">61</li><li style="box-sizing: border-box; padding: 0px 5px;">62</li><li style="box-sizing: border-box; padding: 0px 5px;">63</li><li style="box-sizing: border-box; padding: 0px 5px;">64</li><li style="box-sizing: border-box; padding: 0px 5px;">65</li><li style="box-sizing: border-box; padding: 0px 5px;">66</li><li style="box-sizing: border-box; padding: 0px 5px;">67</li><li style="box-sizing: border-box; padding: 0px 5px;">68</li><li style="box-sizing: border-box; padding: 0px 5px;">69</li><li style="box-sizing: border-box; padding: 0px 5px;">70</li></ul>

代码创建Window

<code class="language-Objc hljs avrasm has-numbering" style="display: block; padding: 0px; background: transparent; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal;"> // <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1.</span>创建Window  UIScreen<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.main</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.bounds</span>屏幕尺寸window = UIWindow(frame: UIScreen<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.main</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.bounds</span>)window?<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.rootViewController</span> = LXRMainTabBarController()window?<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.makeKeyAndVisible</span>()     </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li></ul>

便利(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(私有)


设置图片拉伸

这里写图片描述

弹簧动画效果

<code class="language-Objc hljs java has-numbering" style="display: block; padding: 0px; background: transparent; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal;"><span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/** *  Duration:   持续时间 *  delay:      延迟 *  Damping:    阻力系数(0~1),越大效果越不明显 *  Velocity:   速度 *  options:    速度枚举 *  animations: 动画 *  completion: 完成 */</span> UIView.animate(withDuration: TimeInterval, delay: TimeInterval, usingSpringWithDamping: CGFloat, initialSpringVelocity: CGFloat, options: UIViewAnimationOptions, animations: () -> Void, completion: ((Bool) -> Void)?((Bool) -> Void)?(Bool) -> Void)</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li></ul>

Swift中??的作用

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

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

<code class="hljs avrasm has-numbering" style="display: block; padding: 0px; background: transparent; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal;">let iconViewUrl = LXRAccountTool<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.shareInstance</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.account</span>?<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.avatar</span>_large ?? <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">""</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

Swift中self使用场景

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

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

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


动态设置tableViewCell高

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

1.设置自动尺寸

2.设置估算高度

<code class="language-Objc hljs rust has-numbering" style="display: block; padding: 0px; background: transparent; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">///5.设置行高</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//自动尺寸</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span>.tableView.rowHeight = UITableViewAutomaticDimension <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//估算高度</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span>.tableView.estimatedRowHeight = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">200</span> </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li></ul>

storyBoard快捷键

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

cmd + option(alt) + =

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

cmd + =


获取控件最大X.Y值

<code class="language-Objc hljs avrasm has-numbering" style="display: block; padding: 0px; background: transparent; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal;">// 获取maxX->控件+frame+maxXpicCollectionView<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.frame</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.maxX</span>// 获取maxY->控件+frame+maxYpicCollectionView<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.frame</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.maxY</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li></ul>

监听键盘通知

1.添加通知

这里写图片描述

2.键盘通知实现方法

这里写图片描述

3.打印信息

这里写图片描述

0 0
原创粉丝点击