// 定义常量与变量// Option + click 可以查看变量/常量的类型/**
- 使用 `let` 定义常量
- 使用 `var` 定义变量
- Swift 中 使用 Int 对应 NSInteger, Double --> CGFloat
- 自动推导:系统会根据等号后面的值,推断出前面变量(常量)的类型
- 指定变量/常量的类型,在名字后面加上 `:类型`
- 不同类型之间不允许直接计算(必须要转成相同类型)
- 先使用 let ,如果这个值需要改变的话,再更改成 var
- 空格大法:运算符左右的空格一定要对称
*/
func demo1(){
let a: Double = 10// 常量不允许更改// a = 20
print(a)
var b = 15
print(b)
// 更改
b = 20
print(b)
// 不同类型之间不允许直接计算// let result = a + b
let result = Int(a) + b
print(result)
}
可选项
// 可选项 Optional/**
- 在 Swift ,变量(常量)可能有值,可能为 nil,称为可选
- 使用 `?` 标识某个值是一个可选的值
- 可选项的值不能直接进行运算
- 使用 `!` 向系统表明,我这个 a 里面一定有值 (强行解包)
- 我们需要思考 `!` 标识的变量里面是否真的有值
- "unexpectedly found nil while unwrapping an Optional value" --> 对一个值为 nil 的可选项进行强制解包
- `??` 用于判断 可选值 是否为空,如果为空并提供一个默认值
*/
func demo2(){
// 定义一个可选值var a: Int? = 10
let b = 10// 报错的原因,如果 a 为nil,不能直接相加// 方式1:如果 a 不为 nil 才进行运算if (a != nil) {
let result = a! + b
print(result)
}
// 方式2:使用 `??`// 如果 `??` 前面的变量/常量 是一个nil的话,就使用 `??` 后面的值进行运算
let result = b + (a ?? 0)
print(result)
}
// 定义常量与变量// Option + click 可以查看变量/常量的类型/**
- 使用 `let` 定义常量
- 使用 `var` 定义变量
- Swift 中 使用 Int 对应 NSInteger, Double --> CGFloat
- 自动推导:系统会根据等号后面的值,推断出前面变量(常量)的类型
- 指定变量/常量的类型,在名字后面加上 `:类型`
- 不同类型之间不允许直接计算(必须要转成相同类型)
- 先使用 let ,如果这个值需要改变的话,再更改成 var
- 空格大法:运算符左右的空格一定要对称
*/
func demo1(){
let a: Double = 10// 常量不允许更改// a = 20
print(a)
var b = 15
print(b)
// 更改
b = 20
print(b)
// 不同类型之间不允许直接计算// let result = a + b
let result = Int(a) + b
print(result)
}
控制流
//if
/**
- Swift中,条件语句可以不使用 `()` 括起来
- Swift中,`{}` 必须写
- 没有 OC 中的 `非0即真` 的概念 -->true/false
*/
func demo1(){
let a = 10if a > 5 {
print("a大于5")
}
}
//------------------------------------------------
// 判断可选值: iflet
/**
// 方式2: iflet: 会判断 url 是否有值
// - 如果有值,把值赋值给 u,并且进入到 if 括号内部
// - 如果没有值,不会赋值,也不会执行括号内部的代码
*/
func demo2(){
let url = NSURL(string: "http://www.baidu.com/")
// 方式1:
//if url != nil {
//let request = NSURLRequest(URL: url!)
//print(request)
//// 如果以下会大量使用 url 的话,都需要强制解包
// }
// 方式2: iflet: 会判断 url 是否有值
// - 如果有值,把值赋值给 u,并且进入到 if 括号内部
// - 如果没有值,不会赋值,也不会执行括号内部的代码
iflet u = url {
// 代码执行到这个地方, url 不为空, u 一定有值
let request = NSURLRequest(URL: u)
print(request)
// 如果以下要大量使用的话,可以直接使用 u
}
}
//------------------------------------------------
//iflet 配合 where
//where: 给前面 let 的常量 多加一个条件判断
func demo3(){
let url = NSURL(string: "http://www.baid.com/")
// 判断 url 不为空并且其 host 为 `www.baidu.com` 再初始化 request
// 方式1:
if url != nil {
if url!.host == "www.baidu.com" {
let request = NSURLRequest(URL: url!)
print(request)
}
}
// 方式2:
iflet u = url where u.host == "www.baidu.com" {
let request = NSURLRequest(URL: u)
print(request)
}
}
//------------------------------------------------
// guard let// 与 iflet 相反
// 可以减少 `{}` 嵌套
func demo4(){
let url = NSURL(string: "http://www.baid.com/")
guard let u = url else {
print("url为nil")
return
}
// 代码执行到这个地方,就代表 url 一定有值
let request = NSURLRequest(URL: u)
print(request)
}
//------------------------------------------------
//switch
/**
- 可以不用写 break,但是,case 下面必须跟上一条语句
- 在 OC 中,switch 只能判断整形,Swift 中可以判断任意类型
- Swift 中 case 里面定义变量/常量可以不用加 `{}` 指明作用域,只在当前 case 内部有效
*/
func demo5(){
let scroeStr = "优"switch scroeStr {
case"优":
print("大于90分")
let s = "哈哈"print(s)
case"良":
print("大于80分小于90分")
case"中":
print("大于60分小于80分")
case"差":
print("小于60分")
default :
print("其他")
}
}
//------------------------------------------------
//switch 判断
func demo6(){
let score = 95
// 如果大于90分,输出 `优`,其他类似
switch score {
//case 里里定义一个 s ,记录当前判断的值,where 添加一个条件判断
//// 如果不使用 s ,可以使用 `_` 占位
caselet s where s >= 90:
print("优")
caselet s where s >= 80 && s < 90:
print("良")
caselet s where s >= 60 && s < 80:
print("中")
caselet s where s < 60:
print("差")
}
}
循环
// for 循环
func demo1(){
/*
for (int i=0; i<10; i++) {
NSLog(@"%zd",i);
}
*/
// 仿 oc 写法
for (var i = 0; i < 10; i++) {
print(i)
}
print("============")
// Swift 特有的写法
// 指定的范围是: 0到10,不包括10--> [0,10)for _ in0..<10 {
print("哈哈")
}
print("============")
// 指定的范围是: 0到10,包括10--> [0,10]for i in0...10 {
print(i)
}
}
//---------------------------------------------
// while--> 能看得懂
func demo2(){
var i = 10
// 实现循环一次减 1 ,如果 i<=0 的时候就不循环
while (i > 0) {
i--print(i)
}
// do-- while -> 更改成 repeat whilerepeat {
i--print(i)
}while (i > 0)
}