//枚舉 函數(shù) 結(jié)構(gòu)體 類 協(xié)議? 代理設(shè)計模式 閉包
import Foundation
//枚舉 enum
// enum 枚舉名:值類型 {
//? ? case 枚舉情況 = 初始值
//? ? case 枚舉情況 = 初始值
//? ? ...
// 值類型和初始值可以選擇是否賦值
//枚舉也是一種數(shù)據(jù)類型,只不過是我們自定義的數(shù)據(jù)類型
//}
//季節(jié)
enum Season:String {
case spring = "春天"
case summer = "夏天"
case autumn = "秋天"
case winter = "冬天"
}
//定義變量常量
let aSeason:Season = Season.spring
//給定數(shù)據(jù)類型就賦值時就可以省略枚舉類型
let aSeason2:Season = .summer
//不給定數(shù)據(jù)類型煎楣,首次賦值一定要給枚舉類型
var aSeason3 = Season.summer
aSeason3 = .spring
//獲取枚舉情況的值
print(aSeason3.rawValue)//rawValue才是真正的枚舉值
print(aSeason3.hashValue)//hashValue case的編號從0開始
//枚舉經(jīng)常和switch結(jié)合使用
switch aSeason3{
case .spring:
print("春天來了,夏天還會遠(yuǎn)嗎?")
fallthrough //增加case的穿透性 但是只能穿透一條
case .summer:
print("夏天來了胜蛉,秋天還會遠(yuǎn)嗎?")
fallthrough
case .autumn:
print("秋天來了,收獲的季節(jié)到了")
fallthrough
//枚舉情況沒有列舉完的default語句必須添加
// 枚舉情況都列舉完,default語句不需要再寫
case .winter:
print("冬天太冷了")
//default:
//? ? print("你是來自火星的嗎")
}
//函數(shù):能完成特定功能的代碼段 好處:方便調(diào)用肌访,保護(hù)知識產(chǎn)權(quán) 減少代碼冗余
////1無參數(shù),無返回值
//2無參數(shù)艇劫,有返回值
//3有參數(shù)吼驶,無返回值
//4有參數(shù),有返回值
// 函數(shù)定義的格式
/*
func 函數(shù)名(參數(shù)列表) -> (返回值類型) {
函數(shù)體
}
*/
//小王買紅酒(沒給錢 店煞,沒紅酒)
//1無參數(shù)蟹演,無返回值
//函數(shù)的定義
func buyRedwine() -> Void {
print("錢沒給不買")
}
//函數(shù)的調(diào)用
buyRedwine()
//2無參數(shù),有返回值
func buyRedwine2() -> Int {
print("82年的拉菲來一瓶")
return 1
}
//函數(shù)的調(diào)用
let bottle = buyRedwine2()
print("買了\(bottle)瓶")
//3有參數(shù)顷蟀,無返回值
//沒有返回值的時候 ->void可以省略
func buyXuebi(money:Int){
print("\(money)塊錢熬魄搿!好多呀鸣个!跑路呀")
}
buyXuebi(money: 100)
//4有參數(shù)羞反,有返回值
func buyXuebei2(money:Int) -> Int {
print("買了\(money / 2)瓶雪碧")
return money / 2
}
let bottle2 = buyXuebei2(money: 5)
print("買了\(bottle2)瓶")
//計算兩個數(shù)的和
//a,b是形參 oneNumber,otherNumber是外部參數(shù)囤萤,對形參進(jìn)行說明的
func sum(oneNumber a:Int, otherNumber b:Int) -> Int {
return a + b
}
//調(diào)用時傳的的值為實(shí)參
print(sum(oneNumber: 10, otherNumber: 20))
//可變參數(shù)函數(shù)
func qiuHe(numbers:Int...) -> Int {
//傳的多個參數(shù)存放在numbers形參里了昼窗,此時numbers相當(dāng)一個數(shù)組
var result = 0
for item in numbers {
result += item
}
return result
}
print(qiuHe(numbers: 1,2,3,4,5,6,7))
//定義一個函數(shù)交換兩個變量的值
//Swift 所有的形參默認(rèn)都是常量,函數(shù)內(nèi)部不能修改形參的值
func swap(num1: inout Int , num2:inout Int)? {
let temp = num1
num1 = num2
num2 = temp
}
var a = 10, b = 20
swap(&a, &b)
print("a\(a)" , "b\(b)")
//結(jié)構(gòu)體 用來描述一個有多個屬性組成的整體涛舍,也是一種自定數(shù)據(jù)類型
//結(jié)構(gòu)體的定義格式
/*struct 結(jié)構(gòu)體名{
屬性列表
方法
}*/
//類的三大特性封裝 類型 多態(tài)
struct Orgin {
//存儲屬性
var x:Float
var y:Float
//對象方法
func drawOrign ()? {
print("在二維坐標(biāo)系中畫一個點(diǎn)")
}
//類方法
static func showPoint(){
print("我是一個點(diǎn)")
}
}
//結(jié)構(gòu)題的使用
let p1 = Orgin(x: 10.2, y: 15.3)
p1.drawOrign()
//使用結(jié)構(gòu)體名調(diào)用類方法
Orgin.showPoint()
print(p1.x,p1.y)
//尺寸的結(jié)構(gòu)體
struct Size {
var height:Float
var? width:Float
}
let asize = Size(height: 20.0, width: 100.0)
print(asize)
struct Frame {
//結(jié)構(gòu)體的屬性依然可以是結(jié)構(gòu)體
var orign:Orgin
var size:Size
//計算屬性不是用來給自己賦值的 而是要間接的為其他屬性賦值澄惊,自己的值只能通過計算獲得,不能直接給自己賦值
var center:Orgin {
// 間接為orign屬性賦值
set(newCenter) {
orign.x = newCenter.x - size.width * 0.5
orign.y = newCenter.y - size.height * 0.5
}
//間接的獲取到自己的值
get {
let x = orign.x + size.width * 0.5
let y = orign.y + size.height * 0.5
return Orgin(x:x,y:y)
}
}
}
var aFrame = Frame(orign: Orgin(x: 10, y: 20), size: Size(height: 50, width: 100))
//取計算屬性的值
print(aFrame.center)
//給計算屬性賦值富雅,不是給它自己賦值掸驱,是間接的為其他屬性賦值
aFrame.center = Orgin(x: 50, y: 50)
print(aFrame.orign) //orgin:(0.0,25.0)