swift3.0 后基础语法 / 变化 一

本贴最后更新于 3026 天前,其中的信息可能已经时过境迁

之前学习了 swift,但是感觉语法变化太大,经常很多写法,现在 swift 已经相当稳定,但是看了下发现之前写的代码一片红,才发现很多地方变了,所以准备最近再看下,主要是要用起来

方便起见直接贴代码

// 1.导入框架 import UIKit //        2.在swift中如果定义一个标识符.必须告诉编译器该标识符是一个变量还是一个常量 //         如果是常量使用let修饰 //         如果是变量使用var修饰 //         let 标识符的名称 : 类型 = 赋值 //可以省略类型,有类型推导 //         var 标识符的名称 : 类型 = 赋值 //        使用注意: //        1.一般优先使用let,只有当是需要修改时候才使用var //        2.常量的本质:指向的内存地址不可以被修改,但是可以通过内存地址获得对象后,之后修改对象的内部的属性 //        3.隐式转化:在Int类型和Double进行基本运算时,会自动将Int类型转成Double //        let a : Int = 10;//如果一行只有一条语句那么后面的;可以省略 //        a = 10;//报错,因为let是常量不可以被修改 //        let view : UIView;// = [UIView alloc] init]; //        var b :Double = 1.44; //        b = 20.44;//b是变量可以被修改 //        let a = 10.0; //        let result = Int(a); //        print(result) // //        let view : UIView = UIView(); //        view.backgroundColor = UIColor.red; //        view.frame = CGRect(x: 10, y: 10, width: 100, height: 100); //        self.view.addSubview(view); // //        let view1 : UIView = UIView(frame: CGRect(x: 20, y: 20, width: 100, height: 100)); //        view1.backgroundColor = UIColor.blue; //        self.view.addSubview(view1); // //        let btn : UIButton = UIButton(frame: CGRect(x: 0, y: 0, width: 20, height: 20)); //        btn.backgroundColor = UIColor.green; //btn方法调用 //        btn.addTarget(self, action: #selector(ViewController.youyouyou), for: UIControlEvents.touchUpInside) //        btn.addTarget(self, action: #selector(ViewController.youyouyou), for: .touchUpInside)//或者这样 //        view1.addSubview(btn); //        3.打印 //        print("hahah") //         4.swift和OC的区别 //         1.swift中if后面的()可以省略 //         2.没有非0即真,必须有明确的Bool -> true/false //        let a = 10; //        if a > 0 { //            print("a大于0") //        } else { //            print("a不大于0") //        } // //        let score = 66; //        if score < 0 || score > 100 { //            print("不合理的分数") //        } else if score < 60 { //            print("不及格") //        } else if score < 80 { //            print("及格") //        } else if score < 90 { //            print("良好") //        } else { //            print("优秀") //        } //         5.三目运算符 //        let m = 10; //        let n = 20; //        let result = m > n ? m : n; //        print(result);//n 20 //         6.guard的使用 //         1.如果条件表达式为真,则会执行后面的语句 //         2.如果条件表达式为假,则会执行else后面的{}中的语句 //func getScore( a : Double) -> Void { //     //    guard a > 60 else { //        print("不及格") //        return //    } //    guard a > 80 else { //        print("不错,及格了") //        return //    } //    guard a > 100 else { //        print("优秀") //        return //    } //    print("chao神") //} //         7.swift中的switch和OC的区别 //         1.switch后面的()可以省略 //         2.case结束后可以不加break,系统会默认跟上break //         3.case后面跟多个条件,并且多个条件以,进行分割 //         4.如果case中希望产生case穿透,可以使用fallthrough //         5.switch支持浮点型 //         6.switch支持字符串类型 //         7.switch支持区间类型 //func getSex(sex:Int) -> Void { //    switch sex {//sex可以是整型,浮点型,字符串 //    case 0: //        print("女") //    case 1,2,3: //        print("男") //    case 4...8: //        print("幺") //    fallthrough//穿透 //    default: //        print("不知道") //    } //} //swift中方法 //func youyouyou() ->  Void{ //    print("hahah") //} //        8.循环for //      需求:打印0-9 //      1.写法一 //for i in 0..<10{ //    print(i) //} //      2.写法二 //        如果for循环中不需要使用到下标i,可以用_代替 //for _ in 0..<10 { //    print("aoliu") //} //        9.循环while  do while //        注意: //            1.没有非零即真,必须有一个明确的bool值 //            2.while后面的()可以省略 //            3.没有a-- //            4.do while 不是do ,do用到了异常捕获 这里用repeat代替 //var a = 10 // //while a > 0 { //    a -= 1 //    print(a) //} //var m = 10 //repeat { //    m -= 1 //    print(m) //}while m > 0 //        10.字符串 //            注意: //             一,OC和Swift中字符串的区别 //                1.在OC中字符串类型时NSString,在Swift中字符串类型是String //                2.OC中字符串@"",Swift中字符串"" //             二.使用 String 的原因 //                String 是一个结构体,性能更高 //                NSString 是一个 OC 对象,性能略差 //                String 支持直接遍历 //                Swift 提供了 String 和 NSString 之间的无缝转换 //let str = "hello world" //var string = "hello world" //string = "aoliu" //1.获取字符串长度 //let length = string.characters.count //2.遍历字符串中所有的字符 //for c in string.characters { //    print(c) //} //3.字符串的拼接 //let a = "ao" //let b = "liu" //let result = a + b //4.字符串和其他标识符的拼接 //let age = 18 //let name = "aoliu" //let height = 1.78 //let info = "my name is \(name) ,\(age) years old, height is \(height)" //5.字符串的格式化 //let time = 90 //let min = time / 60 //let second = time % 60 //let timeStr = String(format: "%02d:%02d", min,second) //6.字符串截取:将String转变为NSString再截取 //let urlString = "www.baidu.com" //let header = (urlString as NSString).substring(to: 3) //let footer = (urlString as NSString).substring(from: 10) //let range = NSMakeRange(4, 5) //let middle = (urlString as NSString).substring(with: range) //        11.数组 //            数组(Array)是一串有序的由相同类型元素构成的集合 //            数组中的集合元素是有序的,可以重复出现 //            Swift中的数组 //            swift数组类型是Array,是一个泛型集合 //1.定义数组 //let array : [String] = ["aoliu","xiaowang"]//不可变 [String]泛型 //var array1 = [String]()//可变数组 //2.CRUD //array1.append("xiaomin") //array1.append("xiaohong") //array1.append("xiaoli") //array1.remove(at: 1)//返回值是删除的元素 //array1.remove(at: 0)//返回值是删除的元素 // //array1[0] = "ao" // //let name = array1[0] //3.遍历数组 //for i in 0..<array1.count { //    print(i) //    print(array1[i]) //} // //for name in array1 {//常见 //    print(name) //} // //for (index,name) in array1.enumerated(){//swift提供的既能拿到下标又能拿到元素,常见 //    print(index) //    print(name) //} //for name in array1[0..<1]{//可以指定遍历区间 //    print(name) //} //4.数组合并 //注意:只有相同类型的数组才能合并,不一致不能 //let name1 = ["aoliu","xiaowang"] //let name2 = ["xiaohong","xiaoli"] //let name3 = name1 + name2 //        12.字典 //        字典允许按照某个键来访问元素 //        字典是由两部分集合构成的,一个是键(key)集合,一个是值(value)集合 //        键集合是不能有重复元素的,而值集合是可以重复的,键和值是成对出现的 //        Swift中的字典 //        Swift字典类型是Dictionary,也是一个泛型集合 //        []如果里面放元素就是数组,如果放键值对就是字典 //1.定义字典 //let dict :[String:Any] = ["name":"AOLIU","age":26] //var dictM = [String : Any]() //2.对可变字典的基本操作 //dictM["name"] = "XIAOWANG" //dictM["name"] = nil //dictM.updateValue(19, forKey: "age") //print(dictM) //dictM.removeValue(forKey: "age") //print(dictM) //let name = dictM["name"] //print(name ?? "dd") //如果name没有值为nil就用??后面的代替 //3.遍历字典 //3.1遍历字典中所有的key //dictM["name"] = "XIAOWANG" //dictM["age"] = 26 //for key in dictM { //    print(key)//打印出的是一个元祖,随后看 ("name", "XIAOWANG") ("age", 26) //    print(key.0)// name age //    print(key.1)// XIAOWANG 26 //} //for key in dictM.keys { //    print(key)//name age //} //3.2遍历字典中所有的value //for value in dictM.values { //    print(value)//XIAOWANG 26 //} //3.1遍历字典中所有的key/value //for (key,value) in dictM {//()元祖 //    print(key)//name age //    print(value)//XIAOWANG 26 //} //4.合并字典  // 字典不可以相加合并 //let dict1 :[String:Any] = ["name":"AOLIU","age":18] //var dict2 = ["height":1.80,"weight":"65"] as [String : Any]//如果字典中value值类型不一样就需要as如果一样就不用 ////var dict3 = ["height":1.80,"weight":65] // //for (key , value) in dict1 { //    dict2.updateValue(value, forKey: key) //} //print(dict2) //        13.元组 //        元组是Swift中特有的,OC中并没有相关类型 //        它是什么呢? //        它是一种数据结构,在数学中应用广泛 //        类似于数组或者字典 //        可以用于定义一组数据 //        组成元组类型的数据可以称为“元素” //let infoTuple = ("name",26,1.78) //infoTuple.0//"name" String //infoTuple.1// 26 Int //infoTuple.2// 1.78 Double //元组一般作为方法的多个返回值 //func test() -> (String,Int,Double) { //    return ("name",12,1.22) //} //元组可以给每一个元素起别名 //let infoTuple1 = (name:"AOLIU",age:12,height:1.66) //infoTuple1.name//AOLIU //infoTuple1.age//12 //infoTuple1.height//1.66 //let (name,age,height) = ("name",26,1.78) //name//"name" String //age// 26 Int //height// 1.78 Double //        14.可选类型(重点,难点) //        概念: //        在OC开发中,如果一个变量暂停不使用,可以赋值为0(基本属性类型)或者赋值为空(对象类型) //        在swift开发中,nil也是一个特殊的类型.因为和真实的类型不匹配是不能赋值的(swift是强类型语言) //        但是开发中赋值nil,在所难免.因此推出了可选类型 //        可选类型的取值: //        空值 //        有值 //可选类型推出的目的:对nil值进行处理 //1.定义可选类型 var name : Optional<String> = nil//方法一 var age : Int? = nil//方法二(语法糖) if age != nil {     print(age!)     print("afdaf") } print(age ?? "hahhaha") print(age as Any) //现在打印可选类型有三种方式处理 //1.强制解包    print(age!) //2.如果为空选择代替 print(age ?? "hahhaha") //3.防止报错直接让age可以为任何类型 print(age as Any) //2.给可选类型赋值 print(name ?? "d") name = "AOLIU" print(name ?? "d")//如果可选类型有值就是name,如果可选类型为nil就用??后面的代替 //3.从可选类型中取出具体的类型 //强制解包 : 可选类型 + ! print(name!) //4.可选类型注意:如果可选类型中没有值强制解包程序会崩溃 //所以:在对可选类型进行强制解包前,先判断可选类型是否等于nil if name != nil {     print(name!) } print(name ?? "kong") //5.可选绑定 //可选绑定做了两件事情 //1.判断name是否有值,如果没有(nil)大括号不会执行 //2.如果name有值,系统会将可选类型进行解包然后赋值给tempName if let tempName = name {     print(tempName) } //或 if let name = name {     print(name) } //可选类型练习: //练习一: let str = "13" let num = Int(str)//num为可选类型,因为str有可能能转为Int也有可能不能转为Int,如果不能转为Int就会为nil,所以是可选类型 print(num ?? "为空")//使用??后面的来提醒用户 if num != nil { print(num!)//通过强制解包获取num的值,但是如果num为nil就会崩溃,所以最好在强制解包之前进行判断 } print(num as Any)//将num转化为Any任何值,但是获取到的是还是一个可选类型 Optijjonal() //练习二: let path = Bundle.main.path(forResource: "123.plist", ofType: nil)//返回的是一个可选类型,因为如果bundle中没有找到123.plist就会返回nil if let path = path { NSArray(contentsOfFile: path)//这里需要传的必须是一个String(路径);但是path是可选类型,所以必须进行强制解包,解包前最好进行判断 } //练习三: let url = URL(string: "www.baidu.com") if let url = url { NSURLRequest(url: url) print(url) } let urlStr = NSURL(string: "www.baidu.com")//同练习二,返回的是可选类型 if let urlStr = urlStr { NSURLRequest(url: urlStr as URL) print(urlStr) } //15.类型转化 //常见的类型转化符号 //is : 用于判断一个实例是否是某一种类型 和OC中的isKindofClass:功能一样 //as : 将实例转成某一种类型 //as?: 转成的最终类型是一个可选类型 //as!: 转成的最终类型是一个具体类型 //is的用法 let array : [Any] = ["AOLIU",26,1.78] let ArrayM = [NSObject]() if let firstObj = array.first { if firstObj is Int { print("是Int") }else{ print("不是Int") } } //as的用法 let dict : [String : Any] = ["name" : "AOLIU", "age" : 26, "height" : 1.78] let dictM = [String : NSObject]() let value = dict["name"]//value是一个可选类型,因为可能取出来有值,可能没有值 //as?: 转成的最终类型是一个可选类型 if let value = value {//可选绑定 //将value转化为字符串 let valueStr = value as? String//valueStr还是一个可选类型,因为as?最终类型是一个可选类型 if let valueStr = valueStr {//可选绑定 print("my name is " + valueStr) } } //NSObject?转化为NSString? if let valueStr = value as? String { print("my name is " + valueStr) } //NSObject?转化为NSString //但是如果转化不成功就会崩溃 print("my name is " + (value as! String))
  • iOS

    iOS 是由苹果公司开发的移动操作系统,最早于 2007 年 1 月 9 日的 Macworld 大会上公布这个系统,最初是设计给 iPhone 使用的,后来陆续套用到 iPod touch、iPad 以及 Apple TV 等产品上。iOS 与苹果的 Mac OS X 操作系统一样,属于类 Unix 的商业操作系统。

    87 引用 • 139 回帖 • 1 关注
  • Swift

    Swift 是苹果于 2014 年 WWDC(苹果开发者大会)发布的开发语言,可与 Objective-C 共同运行于 Mac OS 和 iOS 平台,用于搭建基于苹果平台的应用程序。

    36 引用 • 37 回帖 • 545 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Excel
    31 引用 • 28 回帖
  • 小说

    小说是以刻画人物形象为中心,通过完整的故事情节和环境描写来反映社会生活的文学体裁。

    31 引用 • 108 回帖
  • 尊园地产

    昆明尊园房地产经纪有限公司,即:Kunming Zunyuan Property Agency Company Limited(简称“尊园地产”)于 2007 年 6 月开始筹备,2007 年 8 月 18 日正式成立,注册资本 200 万元,公司性质为股份经纪有限公司,主营业务为:代租、代售、代办产权过户、办理银行按揭、担保、抵押、评估等。

    1 引用 • 22 回帖 • 786 关注
  • 数据库

    据说 99% 的性能瓶颈都在数据库。

    345 引用 • 742 回帖 • 1 关注
  • Caddy

    Caddy 是一款默认自动启用 HTTPS 的 HTTP/2 Web 服务器。

    12 引用 • 54 回帖 • 165 关注
  • 旅游

    希望你我能在旅途中找到人生的下一站。

    93 引用 • 901 回帖
  • SOHO

    为成为自由职业者在家办公而努力吧!

    7 引用 • 55 回帖 • 5 关注
  • 爬虫

    网络爬虫(Spider、Crawler),是一种按照一定的规则,自动地抓取万维网信息的程序。

    106 引用 • 275 回帖 • 2 关注
  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    117 引用 • 99 回帖 • 204 关注
  • 996
    13 引用 • 200 回帖 • 2 关注
  • CloudFoundry

    Cloud Foundry 是 VMware 推出的业界第一个开源 PaaS 云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。

    5 引用 • 18 回帖 • 176 关注
  • ZooKeeper

    ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 HBase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

    59 引用 • 29 回帖 • 2 关注
  • iOS

    iOS 是由苹果公司开发的移动操作系统,最早于 2007 年 1 月 9 日的 Macworld 大会上公布这个系统,最初是设计给 iPhone 使用的,后来陆续套用到 iPod touch、iPad 以及 Apple TV 等产品上。iOS 与苹果的 Mac OS X 操作系统一样,属于类 Unix 的商业操作系统。

    87 引用 • 139 回帖 • 1 关注
  • 反馈

    Communication channel for makers and users.

    126 引用 • 929 回帖 • 268 关注
  • SVN

    SVN 是 Subversion 的简称,是一个开放源代码的版本控制系统,相较于 RCS、CVS,它采用了分支管理系统,它的设计目标就是取代 CVS。

    29 引用 • 98 回帖 • 689 关注
  • Firefox

    Mozilla Firefox 中文俗称“火狐”(正式缩写为 Fx 或 fx,非正式缩写为 FF),是一个开源的网页浏览器,使用 Gecko 排版引擎,支持多种操作系统,如 Windows、OSX 及 Linux 等。

    7 引用 • 30 回帖 • 391 关注
  • 叶归
    5 引用 • 16 回帖 • 10 关注
  • TextBundle

    TextBundle 文件格式旨在应用程序之间交换 Markdown 或 Fountain 之类的纯文本文件时,提供更无缝的用户体验。

    1 引用 • 2 回帖 • 79 关注
  • Office

    Office 现已更名为 Microsoft 365. Microsoft 365 将高级 Office 应用(如 Word、Excel 和 PowerPoint)与 1 TB 的 OneDrive 云存储空间、高级安全性等结合在一起,可帮助你在任何设备上完成操作。

    5 引用 • 34 回帖
  • OpenCV
    15 引用 • 36 回帖 • 1 关注
  • Love2D

    Love2D 是一个开源的, 跨平台的 2D 游戏引擎。使用纯 Lua 脚本来进行游戏开发。目前支持的平台有 Windows, Mac OS X, Linux, Android 和 iOS。

    14 引用 • 53 回帖 • 544 关注
  • sts
    2 引用 • 2 回帖 • 226 关注
  • PWL

    组织简介

    用爱发电 (Programming With Love) 是一个以开源精神为核心的民间开源爱好者技术组织,“用爱发电”象征开源与贡献精神,加入组织,代表你将遵守组织的“个人开源爱好者”的各项条款。申请加入:用爱发电组织邀请帖
    用爱发电组织官网:https://programmingwithlove.stackoverflow.wiki/

    用爱发电组织的核心驱动力:

    • 遵守开源守则,体现开源&贡献精神:以分享为目的,拒绝非法牟利。
    • 自我保护:使用适当的 License 保护自己的原创作品。
    • 尊重他人:不以各种理由、各种漏洞进行未经允许的抄袭、散播、洩露;以礼相待,尊重所有对社区做出贡献的开发者;通过他人的分享习得知识,要留下足迹,表示感谢。
    • 热爱编程、热爱学习:加入组织,热爱编程是首当其要的。我们欢迎热爱讨论、分享、提问的朋友,也同样欢迎默默成就的朋友。
    • 倾听:正确并恳切对待、处理问题与建议,及时修复开源项目的 Bug ,及时与反馈者沟通。不抬杠、不无视、不辱骂。
    • 平视:不诋毁、轻视、嘲讽其他开发者,主动提出建议、施以帮助,以和谐为本。只要他人肯努力,你也可能会被昔日小看的人所超越,所以请保持谦虚。
    • 乐观且活跃:你的努力决定了你的高度。不要放弃,多年后回头俯瞰,才会发现自己已经成就往日所仰望的水平。积极地将项目开源,帮助他人学习、改进,自己也会获得相应的提升、成就与成就感。
    1 引用 • 487 回帖 • 2 关注
  • Wide

    Wide 是一款基于 Web 的 Go 语言 IDE。通过浏览器就可以进行 Go 开发,并有代码自动完成、查看表达式、编译反馈、Lint、实时结果输出等功能。

    欢迎访问我们运维的实例: https://wide.b3log.org

    30 引用 • 218 回帖 • 642 关注
  • Outlook
    1 引用 • 5 回帖
  • Swift

    Swift 是苹果于 2014 年 WWDC(苹果开发者大会)发布的开发语言,可与 Objective-C 共同运行于 Mac OS 和 iOS 平台,用于搭建基于苹果平台的应用程序。

    36 引用 • 37 回帖 • 545 关注
  • Hexo

    Hexo 是一款快速、简洁且高效的博客框架,使用 Node.js 编写。

    22 引用 • 148 回帖 • 8 关注