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

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

之前学习了 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 的商业操作系统。

    84 引用 • 139 回帖
  • Swift

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

    34 引用 • 37 回帖 • 495 关注

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • 小薇

    小薇是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动。

    由于 Smart QQ 从 2019 年 1 月 1 日起停止服务,所以该项目也已经停止维护了!

    34 引用 • 467 回帖 • 689 关注
  • CAP

    CAP 指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得。

    11 引用 • 5 回帖 • 553 关注
  • Maven

    Maven 是基于项目对象模型(POM)、通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

    185 引用 • 318 回帖 • 352 关注
  • Facebook

    Facebook 是一个联系朋友的社交工具。大家可以通过它和朋友、同事、同学以及周围的人保持互动交流,分享无限上传的图片,发布链接和视频,更可以增进对朋友的了解。

    4 引用 • 15 回帖 • 448 关注
  • flomo

    flomo 是新一代 「卡片笔记」 ,专注在碎片化时代,促进你的记录,帮你积累更多知识资产。

    3 引用 • 74 回帖 • 2 关注
  • 设计模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

    198 引用 • 120 回帖
  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    534 引用 • 671 回帖
  • 架构

    我们平时所说的“架构”主要是指软件架构,这是有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计。另外还有“业务架构”、“网络架构”、“硬件架构”等细分领域。

    139 引用 • 441 回帖
  • TGIF

    Thank God It's Friday! 感谢老天,总算到星期五啦!

    284 引用 • 4481 回帖 • 652 关注
  • Sublime

    Sublime Text 是一款可以用来写代码、写文章的文本编辑器。支持代码高亮、自动完成,还支持通过插件进行扩展。

    10 引用 • 5 回帖 • 1 关注
  • Google

    Google(Google Inc.,NASDAQ:GOOG)是一家美国上市公司(公有股份公司),于 1998 年 9 月 7 日以私有股份公司的形式创立,设计并管理一个互联网搜索引擎。Google 公司的总部称作“Googleplex”,它位于加利福尼亚山景城。Google 目前被公认为是全球规模最大的搜索引擎,它提供了简单易用的免费服务。不作恶(Don't be evil)是谷歌公司的一项非正式的公司口号。

    49 引用 • 192 回帖
  • Openfire

    Openfire 是开源的、基于可拓展通讯和表示协议 (XMPP)、采用 Java 编程语言开发的实时协作服务器。Openfire 的效率很高,单台服务器可支持上万并发用户。

    6 引用 • 7 回帖 • 87 关注
  • 小说

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

    28 引用 • 108 回帖 • 3 关注
  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    108 引用 • 54 回帖
  • Vditor

    Vditor 是一款浏览器端的 Markdown 编辑器,支持所见即所得、即时渲染(类似 Typora)和分屏预览模式。它使用 TypeScript 实现,支持原生 JavaScript、Vue、React 和 Angular。

    308 引用 • 1657 回帖 • 1 关注
  • PostgreSQL

    PostgreSQL 是一款功能强大的企业级数据库系统,在 BSD 开源许可证下发布。

    21 引用 • 22 回帖
  • gRpc
    10 引用 • 8 回帖 • 48 关注
  • 机器学习

    机器学习(Machine Learning)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

    76 引用 • 37 回帖
  • IPFS

    IPFS(InterPlanetary File System,星际文件系统)是永久的、去中心化保存和共享文件的方法,这是一种内容可寻址、版本化、点对点超媒体的分布式协议。请浏览 IPFS 入门笔记了解更多细节。

    20 引用 • 245 回帖 • 232 关注
  • 招聘

    哪里都缺人,哪里都不缺人。

    189 引用 • 1056 回帖
  • Sillot

    Sillot (汐洛)孵化自思源笔记,致力于服务智慧新彖乄,具有彖乄驱动、极致优雅、开发者友好的特点
    Github 地址:https://github.com/Hi-Windom/Sillot

    12 引用 • 26 关注
  • 开源

    Open Source, Open Mind, Open Sight, Open Future!

    393 引用 • 3380 回帖 • 1 关注
  • 锤子科技

    锤子科技(Smartisan)成立于 2012 年 5 月,是一家制造移动互联网终端设备的公司,公司的使命是用完美主义的工匠精神,打造用户体验一流的数码消费类产品(智能手机为主),改善人们的生活质量。

    4 引用 • 31 回帖 • 6 关注
  • Chrome

    Chrome 又称 Google 浏览器,是一个由谷歌公司开发的网页浏览器。该浏览器是基于其他开源软件所编写,包括 WebKit,目标是提升稳定性、速度和安全性,并创造出简单且有效率的使用者界面。

    60 引用 • 287 回帖
  • Swagger

    Swagger 是一款非常流行的 API 开发工具,它遵循 OpenAPI Specification(这是一种通用的、和编程语言无关的 API 描述规范)。Swagger 贯穿整个 API 生命周期,如 API 的设计、编写文档、测试和部署。

    26 引用 • 35 回帖 • 7 关注
  • 生活

    生活是指人类生存过程中的各项活动的总和,范畴较广,一般指为幸福的意义而存在。生活实际上是对人生的一种诠释。生活包括人类在社会中与自己息息相关的日常活动和心理影射。

    228 引用 • 1450 回帖
  • SQLite

    SQLite 是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是全世界使用最为广泛的数据库引擎。

    4 引用 • 7 回帖 • 1 关注