//
// ViewController.swift
// 007-可選項的判斷
//
// Created by 莊壯勇 on 2018/1/2.
// Copyright © 2018年 Personal. All rights reserved.
//
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
demo4(name: "老王", age: 18)
}
func demo4(name: String?, age: Int?) {
if let name = name,let age = age {
// 非空的 name 和 age 僅在{}內有效!
print(name + String(age))
print("----------")
}
// guard let & if let 的技巧
// 使用同名的變量接收值,在後續使用的都是非空值,不需要解包
// 好處,可以避免起名字的煩惱!
guard let name = name,let age = age else {
print("姓名或者年齡爲nil")
return
}
print(name + String(age))
}
// MARK: - guard 守衛/守護
// guard let 和 if let 剛好相反
func demo3() {
let oName: String? = "老王"
let oAge: Int? = nil
// guard let 守護一定有值,如果沒有直接返回
guard let name = oName,let age = oAge else {
print("姓名或者年齡爲nil")
return
}
// 代碼執行至此,name 和 age 一定有值!
// 通常判斷是否有值之後,會做具體的邏輯實現,通常代碼多!
// 如果用if let 憑空多了一層分支,guard 是降低分支層次的辦法
// guard 的語法是Swift2.0推出的!
print(name + String(age))
}
// MARK: - if let / var 連用語法,目的就是判斷值
// 不是單純的if
func demo2() {
let oName: String? = "老王"
let oAge: Int? = 10
if oName != nil && oAge != nil {
print(oName! + String(oAge!))
}
// if let 連用,判斷對象的值是否爲nil ,{}內一定有值,可以直接使用,不需要解包
// if var 連用, {}可以對值進行修改
if var name = oName,let age = oAge {
name = "老李"
// 進入分支之後,name和age 一定有值,不需要解包
// name 和age 的作用域僅在{}中
print(name + String(age))
} else {
print("name 或者 age 爲nil")
}
}
// MARK: - ??
func demo1(x: Int?,y: Int?) {
/**
?? 是一個簡單的 三目
- 如果有值,使用值
- 如果沒有值, 使用?? 後面的值替代
*/
print((x ?? 0) + (y ?? 0))
let name: String? = "老王"
print((name ?? "") + "你好")
// ?? 操作符號的優先級'低',在使用的時候,最好加上()包一下
print(name ?? "" + "你好")
}
func demo(x: Int?,y: Int?) {
// 1.強行解包有風險
// print(x! + y!)
// 2.使用if判斷
// 但是: 如果直接使用if,一不小心,會讓代碼很醜陋
if x != nil && y != nil {
print(x! + y!)
} else {
print("x 或者 y 爲nil")
}
}
}
// ViewController.swift
// 007-可選項的判斷
//
// Created by 莊壯勇 on 2018/1/2.
// Copyright © 2018年 Personal. All rights reserved.
//
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
demo4(name: "老王", age: 18)
}
func demo4(name: String?, age: Int?) {
if let name = name,let age = age {
// 非空的 name 和 age 僅在{}內有效!
print(name + String(age))
print("----------")
}
// guard let & if let 的技巧
// 使用同名的變量接收值,在後續使用的都是非空值,不需要解包
// 好處,可以避免起名字的煩惱!
guard let name = name,let age = age else {
print("姓名或者年齡爲nil")
return
}
print(name + String(age))
}
// MARK: - guard 守衛/守護
// guard let 和 if let 剛好相反
func demo3() {
let oName: String? = "老王"
let oAge: Int? = nil
// guard let 守護一定有值,如果沒有直接返回
guard let name = oName,let age = oAge else {
print("姓名或者年齡爲nil")
return
}
// 代碼執行至此,name 和 age 一定有值!
// 通常判斷是否有值之後,會做具體的邏輯實現,通常代碼多!
// 如果用if let 憑空多了一層分支,guard 是降低分支層次的辦法
// guard 的語法是Swift2.0推出的!
print(name + String(age))
}
// MARK: - if let / var 連用語法,目的就是判斷值
// 不是單純的if
func demo2() {
let oName: String? = "老王"
let oAge: Int? = 10
if oName != nil && oAge != nil {
print(oName! + String(oAge!))
}
// if let 連用,判斷對象的值是否爲nil ,{}內一定有值,可以直接使用,不需要解包
// if var 連用, {}可以對值進行修改
if var name = oName,let age = oAge {
name = "老李"
// 進入分支之後,name和age 一定有值,不需要解包
// name 和age 的作用域僅在{}中
print(name + String(age))
} else {
print("name 或者 age 爲nil")
}
}
// MARK: - ??
func demo1(x: Int?,y: Int?) {
/**
?? 是一個簡單的 三目
- 如果有值,使用值
- 如果沒有值, 使用?? 後面的值替代
*/
print((x ?? 0) + (y ?? 0))
let name: String? = "老王"
print((name ?? "") + "你好")
// ?? 操作符號的優先級'低',在使用的時候,最好加上()包一下
print(name ?? "" + "你好")
}
func demo(x: Int?,y: Int?) {
// 1.強行解包有風險
// print(x! + y!)
// 2.使用if判斷
// 但是: 如果直接使用if,一不小心,會讓代碼很醜陋
if x != nil && y != nil {
print(x! + y!)
} else {
print("x 或者 y 爲nil")
}
}
}