Swift语法中的奇淫技巧(持续更新)

1. case let where  if 等一些关键字之间的语法糖

import UIKit

let age = 19

// 判断age在0~19之间,并且还要大于18
if case 0 ..< 20 = age, age > 18{ // if case表示用逗号表示同时满足
    print("aaa")
}

// 解包,x为第一项的值,并且x还要在2~5之间
let vector = (4, 0)
if case (let x, 0) = vector, x >= 2 && x <= 5 {
    print("bbb")
}

// 输出1~10之间能被三整除的数
for case let i in 1...100 where i % 3 == 0 { // 这里不能用逗号替代where
    print(i)
}

for case参考博客:https://www.jianshu.com/p/d13bda313da7

2. if let的使用

import UIKit

var error: Int? = 404
var errorMessage: String? = "Not found"

// 在if let中,前两个let是解包,后面一个逗号是where判断
if let error = error, let errorMessage = errorMessage, error == 404 {
    print("aaa")
    print(error)
    print(errorMessage)
}

3. 可选链和nil coalesce

import UIKit

var error: Int? = 404
var errorMessage: String? = "Not found"

errorMessage?.uppercased() // 这叫可选链,避免了我一层一层解包
if let errorMessage = errorMessage?.uppercased() { // errorMessage?.uppercased()返回的还是一个可选型,因此仍然可以用if let解包
    print(errorMessage)
}

// nil coalesce
let message: String
let message3 = errorMessage ?? "No error" // 如果errorMessage有值,就用,不然就返回一个默认值

4. 隐式可选型

import UIKit

var errorMessage: String! = nil // 隐式的可选型
errorMessage = "not found"
let newString = "The message is " + errorMessage // 这里的errorMessage不用打!号,因为他是隐式可选型,直接使用
print(newString)
import UIKit

class City {
    let cityName: String
    unowned var country: Country
    init(cityName: String, country: Country) {
        self.cityName = cityName
        self.country = country
    }
}

class Country {
    let countryName: String
    var capitalCity: City! //隐式可选型,这里是可以为nil的,如果不加感叹号,那么在下面的构造函数中就一定要完全传入有值的参数,而传入的是self,就进入了死循环,所以要加上!表示只要countryName有值self就可以有值了,就不会报错了
    
    init(countryName: String, capitalCityName: String) { // 构造函数穿进去两个参数都是字符串
        self.countryName = countryName
        self.capitalCity = City(cityName: capitalCityName, country: self) // 首都的构造函数,country传入的是自己
    }
    
    func showInfo() {
        print("This is \(countryName).")
        print("The capital is \(capitalCity.country).")
    }
}

let china = Country(countryName: "China", capitalCityName: "Beijing")
china.showInfo()

猜你喜欢

转载自blog.csdn.net/shijie97/article/details/83960160