01-closure
//: Playground - noun: a place where people can play
importUIKit
varstr ="Hello, playground"
//隨機產生10個整型類型的數組
vararray: [Int] = []
for_in0..<10{
array.append(random()%20)
}
funcbiggerNumberFirst(a:Int, b:Int) ->Bool{
returna > b
}
array.sort(biggerNumberFirst)
//不需要單獨聲明一個函數,直接使用閉包(匿名函數)
//最完整的閉包傳值
array.sort({
(a:Int, b:Int) ->Boolinreturna > b
})
//簡化一:
array.sort({ (a, b)inreturna > b })
//簡化二:
array.sort({ (a, b)ina > b })
//簡化三(常用):編譯器類型推斷; $N表明傳的是第N個參數(N:0,1,2....)
array.sort({ $0 > $1 })
//簡化四(不推薦):
array.sort( > )
//結尾閉包: Trailing Closure
array.sort({
(a:Int, b:Int) ->Boolinreturna > b
})
//使用結尾閉包之后的調用方式:
array.sort(){a, binreturna > b}
01-protocol
//: Playground - noun: a place where people can play
importUIKit
varstr ="Hello, playground"
//結構體遵循協議
protocolFullyNamed {
//屬性(get或者是get/set)+名字+類型+var
//絕對不能初始化
varfullName:String{get}
//var newFullName: String { get set }
//方法(不能有大括號)
funcrandomValue() ->Int
mutatingfuncchangeName(newName:String)
//類型方法(結構體)
staticfuncsomeTypeMethod()
}
//聲明結構體,遵循FullyNamed
structPerson:FullyNamed{
// let修飾表明只讀;var修改表明可讀可寫
varfullName:String
funcrandomValue() ->Int{
returnrandom()%10
}
mutatingfuncchangeName(newName:String) {
fullName= newName
}
staticfuncsomeTypeMethod() {
print("hello")
}
}
//實例化
varperson =Person(fullName:"Shirley")
person.changeName("Maggie")
person.fullName
//類繼承協議
protocolPet {
varname:String{getset}
varbirthPlace:String{get}
funcplayWith()
//修改協議中的屬性的值,不需要添加mutating關鍵詞
funcchangeName(newName:String)
}
classDog:Pet{
varname:String="Puppy"
varbirthPlace:String="Beijing"
funcplayWith() {
print("play with me!")
}
funcchangeName(newName:String) {
name= newName
}
}
vardog =Dog()
dog.playWith()
dog.changeName("Doggy")
dog.name