一:數(shù)組交換其中任意兩個元素
// 交換數(shù)組里面的兩個元素
func swap<T>(array: inout [T], a: Int, b: Int) {
if array.count > a && array.count > b {
(array[a], array[b]) = (array[b], array[a])
} else {
print("交換的數(shù)組越界了")
}
}
二:除法的一個函數(shù)
func divide(dividend: Double?, by divisor: Double?) -> Double? {
guard let dividend = dividend, let divisor = divisor, divisor != 0 else {
return nil
}
return dividend / divisor
}
三:閉包的作用域
var car = "aodi"
let closure = { [car] in
print("I drive \(car)")
}
car = "benchi"
closure()
// [car] in 相當(dāng)于把car變量復(fù)制了一份吴超,所有輸出的是: I drive aodi , 如果把 [car] in 去掉就會輸出: I drive benchi
四:Struct和Class的區(qū)別
Struct是值類型、Class是引用類型方篮。
如果一個變量student被聲明了struct并且是let類型的签孔,那么他的屬性也不能被改變折剃,但是class 的話,可以改變屬性础淤,但是不能改變本身崭放。
五:異常處理
/// 方法一:guard
func showKitten(kitten: Kitten?) {
guard let k = kitten else {
print("There is no kitten")
return
}
print(k)
}
// 方法二:添加throw
enum KittenError: ErrorType {
case NoKitten
}
struct Kitten {
}
func showKitten(kitten: Kitten?) throws {
guard let k = kitten else {
print("There is no kitten")
throw KittenError.NoKitten
}
print(k)
}
try showKitten(nil)
// 方法三:
struct Kitten {
}
func showKitten(kitten: Kitten?) {
guard let k = kitten else {
print("There is no kitten")
fatalError()
}
print(k)
}
六:swift map的用法。
// 把整形的數(shù)組轉(zhuǎn)換為字符串的數(shù)組鸽凶。
let arr: [Int] = [1, 2, 2, 5]
print(arr)
let lastArr = arr.map {
String($0)
}
print(lastArr)
七:open關(guān)鍵字和public關(guān)鍵字區(qū)別
鑒于當(dāng)前寫時候是 Swift3.x, 現(xiàn)在共有5種權(quán)限控制關(guān)鍵字,之后 Swift4 又會有變化.
open
open 修飾的 class 在 Module 內(nèi)部和外部都可以被訪問和繼承
open 修飾的 func 在 Module 內(nèi)部和外部都可以被訪問和重載(override)
Public
public 修飾的 class 在 Module 內(nèi)部可以訪問和繼承币砂,在外部只能訪問
public 修飾的 func 在 Module 內(nèi)部可以被訪問和重載(override),在外部只能訪問
八:求一個整數(shù)的平方
// Int的延展
extension Int {
var squared: Int { return self * self}
}
5.squared // 25
5.squared.squared // 625
九:遍歷數(shù)組的所有元素
// 利用泛型
func printElementFromArray<T>(a: [T]) {
for element in a {
print(element)
}
}
十:利用guard let 避免嵌套
func loginAction() {
guard let username = username, let pwd = pwd else {return}
print("welcome: \(username)")
}
十一:初始化兩個有關(guān)系的變量
// 無論更改radius還是diameter,另一個都會跟著變化其中newValue是系統(tǒng)的變量玻侥。
var radius: Double = 10 // 默認(rèn)半徑是10
var diameter: Double {
get {return radius * 2}
set {radius = newValue/2.0}
}
十二:函數(shù)式編程獲取1到10的偶數(shù)
var events = (1...10).filter {$0 % 2 == 0}