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

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

之前学习了 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 回帖 • 507 关注

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • Unity

    Unity 是由 Unity Technologies 开发的一个让开发者可以轻松创建诸如 2D、3D 多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

    25 引用 • 7 回帖 • 233 关注
  • jQuery

    jQuery 是一套跨浏览器的 JavaScript 库,强化 HTML 与 JavaScript 之间的操作。由 John Resig 在 2006 年 1 月的 BarCamp NYC 上释出第一个版本。全球约有 28% 的网站使用 jQuery,是非常受欢迎的 JavaScript 库。

    63 引用 • 134 回帖 • 732 关注
  • 面试

    面试造航母,上班拧螺丝。多面试,少加班。

    324 引用 • 1395 回帖 • 4 关注
  • Mobi.css

    Mobi.css is a lightweight, flexible CSS framework that focus on mobile.

    1 引用 • 6 回帖 • 708 关注
  • 旅游

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

    86 引用 • 896 回帖 • 1 关注
  • C++

    C++ 是在 C 语言的基础上开发的一种通用编程语言,应用广泛。C++ 支持多种编程范式,面向对象编程、泛型编程和过程化编程。

    106 引用 • 152 回帖
  • BAE

    百度应用引擎(Baidu App Engine)提供了 PHP、Java、Python 的执行环境,以及云存储、消息服务、云数据库等全面的云服务。它可以让开发者实现自动地部署和管理应用,并且提供动态扩容和负载均衡的运行环境,让开发者不用考虑高成本的运维工作,只需专注于业务逻辑,大大降低了开发者学习和迁移的成本。

    19 引用 • 75 回帖 • 618 关注
  • 单点登录

    单点登录(Single Sign On)是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

    9 引用 • 25 回帖
  • WebComponents

    Web Components 是 W3C 定义的标准,它给了前端开发者扩展浏览器标签的能力,可以方便地定制可复用组件,更好的进行模块化开发,解放了前端开发者的生产力。

    1 引用 • 15 关注
  • Webswing

    Webswing 是一个能将任何 Swing 应用通过纯 HTML5 运行在浏览器中的 Web 服务器,详细介绍请看 将 Java Swing 应用变成 Web 应用

    1 引用 • 15 回帖 • 632 关注
  • MyBatis

    MyBatis 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。

    170 引用 • 414 回帖 • 405 关注
  • 游戏

    沉迷游戏伤身,强撸灰飞烟灭。

    171 引用 • 813 回帖 • 1 关注
  • DNSPod

    DNSPod 建立于 2006 年 3 月份,是一款免费智能 DNS 产品。 DNSPod 可以为同时有电信、网通、教育网服务器的网站提供智能的解析,让电信用户访问电信的服务器,网通的用户访问网通的服务器,教育网的用户访问教育网的服务器,达到互联互通的效果。

    6 引用 • 26 回帖 • 524 关注
  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    484 引用 • 906 回帖 • 1 关注
  • 新人

    让我们欢迎这对新人。哦,不好意思说错了,让我们欢迎这位新人!
    新手上路,请谨慎驾驶!

    51 引用 • 226 回帖
  • ngrok

    ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。

    7 引用 • 63 回帖 • 605 关注
  • FFmpeg

    FFmpeg 是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。

    23 引用 • 31 回帖 • 8 关注
  • 996
    13 引用 • 200 回帖 • 2 关注
  • 程序员

    程序员是从事程序开发、程序维护的专业人员。

    541 引用 • 3529 回帖
  • InfluxDB

    InfluxDB 是一个开源的没有外部依赖的时间序列数据库。适用于记录度量,事件及实时分析。

    2 引用 • 60 关注
  • Mac

    Mac 是苹果公司自 1984 年起以“Macintosh”开始开发的个人消费型计算机,如:iMac、Mac mini、Macbook Air、Macbook Pro、Macbook、Mac Pro 等计算机。

    164 引用 • 594 回帖 • 2 关注
  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1083 引用 • 3461 回帖 • 262 关注
  • frp

    frp 是一个可用于内网穿透的高性能的反向代理应用,支持 TCP、UDP、 HTTP 和 HTTPS 协议。

    16 引用 • 7 回帖
  • 微软

    微软是一家美国跨国科技公司,也是世界 PC 软件开发的先导,由比尔·盖茨与保罗·艾伦创办于 1975 年,公司总部设立在华盛顿州的雷德蒙德(Redmond,邻近西雅图)。以研发、制造、授权和提供广泛的电脑软件服务业务为主。

    8 引用 • 44 回帖
  • LeetCode

    LeetCode(力扣)是一个全球极客挚爱的高质量技术成长平台,想要学习和提升专业能力从这里开始,充足技术干货等你来啃,轻松拿下 Dream Offer!

    209 引用 • 72 回帖
  • C

    C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

    83 引用 • 165 回帖 • 11 关注
  • Sphinx

    Sphinx 是一个基于 SQL 的全文检索引擎,可以结合 MySQL、PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。

    1 引用 • 191 关注