/*控制轉(zhuǎn)移語(yǔ)句:
continue: 本次循環(huán)完成了钳降,開(kāi)始下一次循環(huán)
break:結(jié)束循環(huán)蹲盘,跳到循環(huán)體結(jié)束的大括號(hào)后的第一行代碼
fallthrough:貫穿感昼,會(huì)穿透當(dāng)前,執(zhí)行下一步
return
throw
*/
//=================================if恰画、guard-else围详、for-in 語(yǔ)句=================================
let dataArr = [15,51,67,89,32]
var num = 0
for score in dataArr {//遍歷數(shù)組外驱,大于50屠凶,num加3,否則加1
if score > 50 {
num += 3
}else{
num += 1
}
}
print("num的值為:\(num)")
//可選值:在類型后加一個(gè)?
//可以使用if 和 let來(lái)處理值缺失的情況,這個(gè)值可以用可選值來(lái)代替(可選值是一個(gè)具體的值或者nil螃壤,如果是nil表示的是值缺失抗果,在類型后面加一個(gè)?來(lái)表示這個(gè)變量的值是可選的)
var optionStr:String? = "Hello"
print(optionStr == nil)//輸出的是判斷結(jié)果
var optionName:String? = nil//"張三"
var greeting = "World!"
if let name = optionName{//optionName 不為nil,會(huì)把值賦值給name奸晴,這樣在代碼塊中就可以用了
greeting = "Hello,\(name)"
}else{
greeting = "HelloKitty"http://進(jìn)入到此name相當(dāng)于沒(méi)有定義
}
//默認(rèn)值 用 ?? 表示
let nickName:String? = "小四兒"http:// nil
let fullName:String? = "李四"
let informalGreeting = "Hi \(String(describing: nickName ?? fullName))"http://如果nickName為nil就用fullName
//遍歷數(shù)組和字典
let arrDic = ["x": [2, 3, 5, 7, 11, 13],
"y": [1, 1, 2, 3, 5, 8],
"z": [1, 4, 9, 16, 25],
]
var max = 0
for (_,value) in arrDic {//遍歷字典,前一個(gè)key用不到可以用_代替
for num in value { //遍歷字典的每個(gè)value數(shù)組
if num > max {//如果value數(shù)組中的值大于max
max = num//就把這個(gè)值賦值給max
}
}
}
print("字典中的最大值為:\(max)")
//guard-else 提前退出:guard不成立則走else ,成立則走guard結(jié)束大括號(hào)后面的代碼
func testGuardGreet(person:[String: String]){
guard let name = person["name"] else { //獲取字典中的name
print("guard語(yǔ)句不成立冤馏,此處也沒(méi)有name這個(gè)變量")
return
}
print("字典中有name:\(name)")
guard let location = person["location"] else {
print("字典中沒(méi)有l(wèi)ocation這個(gè)值,此處也無(wú)此變量定義")
return
}
print("字典中既有name也有l(wèi)ocation:\(location)")
}
testGuardGreet(person: ["name":"張三"])
testGuardGreet(person: ["name" : "李四","location":"北京"])
//檢查API是否可用:
if #available(iOS 11, *){
print("使用#available檢查 一些API是否可用")
}
//=================================while寄啼、repeat-While語(yǔ)句=================================
var n = 2
while n<100 {
n = n*2
}
print("while循環(huán)結(jié)束后的n的值:\(n)")
var mm = 1
repeat {
mm = mm*2
}while mm<50
print("repeat-while循環(huán)中逮光,結(jié)束條件后置:\(mm)")
var total = 0
for i in 0..<4 {
total += i
}
print("循環(huán)的范圍:\(total)")//使用..< 創(chuàng)建的范圍不包含上界,如果想包含的話需要使用...
var total2 = 0
for j in 0...4{
total2 += j
}
print("包括上界的循環(huán)范圍:\(total2)")
//間隔遍歷:每隔x遍歷一次
for index in stride(from: 0, to: 60, by: 3) { //從0-60 每隔3 遍歷一次
print("半開(kāi)區(qū)間-間隔遍歷:\(index)") // 0墩划、3涕刚、6、9乙帮、……57 (to不包括60)
}
for index in stride(from: 1, through: 10, by: 2) {//遍歷1-10杜漠,每隔2遍歷一次
print("閉區(qū)間- 間隔遍歷:\(index)")//1-10: 1、3察净、5驾茴、7、9氢卡; 0-10:0锈至、2、4译秦、6峡捡、8、10
}
/*蛇與梯子(見(jiàn)圖snakesAndLadders_2x的示例:)
游戲規(guī)則:如果在梯子底部筑悴,會(huì)直接爬到梯子頂部们拙;如果在蛇頭,會(huì)直接滑到蛇尾雷猪;從0開(kāi)始睛竣,每次擲骰子來(lái)決定走幾步
*/
let geNum = 25;//表格的總數(shù)量
var geArr = [Int](repeating: 0, count: geNum+1);//初始化每個(gè)格子的規(guī)則 都為0
geArr[3] = 8 //如果到了格子3晰房,就加8求摇,直接爬到格子11
geArr[6] = 11 //如果到了格子6,就加11殊者,直接爬到格子17
geArr[9] = 9 //如果到了格子9与境,就加9,直接爬到格子18
geArr[10] = 2 //如果到了格子10猖吴,就加2摔刁,直接爬到格子12
geArr[14] = -10 //如果到了格子14,就減10海蔽,會(huì)直接滑到格子4
geArr[19] = -11 //如果到了格子19共屈,就減11绑谣,直接滑到格子8
geArr[22] = -2 //如果到了格子22,就減2拗引,直接滑到格子20
geArr[24] = -8 //如果到了格子24借宵,就減8,直接滑到格子16
var currentGe = 0 //記錄當(dāng)前所在的格子(從0開(kāi)始)
var diceNum = 0 //記錄每次擲骰子的數(shù)(模擬按每次+1:1矾削、2壤玫、3、4哼凯、5欲间、6、1)
while currentGe < geNum { //只要當(dāng)前所在的格子小于25,游戲就沒(méi)有結(jié)束
diceNum += 1//每次擲骰子數(shù)都在上次擲骰子的數(shù)的基礎(chǔ)上+1
if diceNum == 7 { //如果超過(guò)了6断部,就回到1猎贴,繼續(xù)
diceNum = 1
}
currentGe += diceNum //每次都往前移動(dòng)擲出來(lái)的骰子數(shù)個(gè)格子
if currentGe < geArr.count {//如果游戲沒(méi)有結(jié)束
currentGe += geArr[currentGe]// 額外再滿足一下游戲的規(guī)則(上升或下滑)
print("當(dāng)前格子數(shù)是:\(currentGe)")
}
}
print("游戲結(jié)束")
//=================================switch語(yǔ)句=================================
//switch語(yǔ)句:任意類型都可以,匹配上之后會(huì)退出switch蝴光,所以不需要再每個(gè)語(yǔ)句后面加上break;但是每個(gè)case分支后面都必須包含至少一條語(yǔ)句嘱能,否則會(huì)報(bào)錯(cuò),如果語(yǔ)句為空虱疏,就把這個(gè)case條件給去掉惹骂;或者直接寫(xiě)break跳出switch
let tag = "red"
switch tag {
case "red":
print("顏色為red")
print("選對(duì)了")
case "green","GREEN": //一個(gè)case語(yǔ)句后面可以同時(shí)匹配多個(gè),用逗號(hào)分隔
print("顏色為--綠色")
case let x where x.hasSuffix("d")://如果前面都沒(méi)有匹配上做瞪,而且tag的后綴是“d”对粪,就會(huì)走進(jìn)這個(gè)匹配,并將tag的值賦值給常量x在代碼塊中使用
print("特色的switch-case語(yǔ)句:\(x)")//匹配上x(chóng)的值就是tag的值
default:
print("沒(méi)有符合的")
}
//case語(yǔ)句也可以是區(qū)間匹配装蓬,例如: case 1..<3: 這種
//switch匹配元組
let somePoint = (1,1)
switch somePoint {//如果條件滿足很多個(gè)case著拭,只會(huì)執(zhí)行第一個(gè)滿足的case,后面的都不會(huì)執(zhí)行
case (0,0):
print("0牍帚,0")
case (_, 0):
print("在x軸上")
case (0,_):
print("在y軸上")
case (-2...2,-2...2):
print("在一個(gè)封閉的區(qū)間中")
default:
print("沒(méi)找到")
}
//switch 允許判斷條件為常量或者變量---值綁定
let anotherPoint = (2,0)
switch anotherPoint {
case (let x,0)://匹配一個(gè)y為0的點(diǎn)儡遮,并將這個(gè)點(diǎn)的橫坐標(biāo)傳給x
print("匹配在x軸上的一個(gè)值:\(x)")
case (0,let y),(let y,0)://匹配一個(gè)x為0的點(diǎn),并將這個(gè)點(diǎn)的縱坐標(biāo)傳給y;后面是一個(gè)復(fù)合匹配暗赶,let定義的變量需要一致才能在下面使用
print("匹配在y軸上的一個(gè)值:\(y)")
case let(x, y)://匹配任意一個(gè)x,y的點(diǎn)鄙币;由于肯定會(huì)滿足這一條件,所以后面不需要再寫(xiě)默認(rèn)的default分支了
print("匹配任意一個(gè)點(diǎn)的xy坐標(biāo):\(x,y)")
}
//switch 判斷條件可以用where語(yǔ)句來(lái)增加額外的條件
let yetPoint = (1,-1)
switch yetPoint {
case let (x,y) where x == y://x,y都是占位符蹂随,需要滿足where后面的條件才可以執(zhí)行這個(gè)case
print("\(x,y)在 x==y 這個(gè)對(duì)角線上")
case let (x,y) where x == -y:
print("\(x,y)在 x==-y這個(gè)對(duì)角線上")
case let (x,y):
print("\(x,y)這個(gè)點(diǎn)不在上面那兩條對(duì)角線上")
}
//=================================控制轉(zhuǎn)移語(yǔ)句:=================================
//continue: 本次循環(huán)完成了十嘿,開(kāi)始下一次循環(huán)
let puzzleInput = "great minds think alike"
var puzzleOutput = ""
for character in puzzleInput {//遍歷字符串
switch character {
case "a","e","i","o","u"," "://跳過(guò)元音字符和空格
continue
default:
puzzleOutput.append(character)//把其他的字符拼接到一塊
}
}
print("拼接后的字符串為:\(puzzleOutput)")
//break:結(jié)束循環(huán),跳到循環(huán)體結(jié)束的大括號(hào)后的第一行代碼
let numberSymbol:Character = "三"
var possibleIntValue: Int?
switch numberSymbol {
case "1","一","壹":
possibleIntValue = 1
case "二","2","貳":
possibleIntValue = 2
case "叁","3","三":
possibleIntValue = 3
default:
break
}
if let posNum = possibleIntValue {
print("匹配的結(jié)果為:\(posNum)")
}else{
print("沒(méi)有匹配上")
}
//fallthrough:貫穿岳锁,會(huì)穿透當(dāng)前绩衷,執(zhí)行下一步
let desNum = 5
var desStr = "數(shù)據(jù)\(desNum),"
switch desNum {
case 2,3,4,5,6:
desStr += "匹配上了"
fallthrough
case 0,1,7,8,9:
desStr += ",case穿透了"
default:
desStr += "咳燕,default穿透了"
}
print("穿透結(jié)果:\(desStr)")//帶fallthrough語(yǔ)句勿决,會(huì)直接穿透到下一步,而無(wú)視case的條件
//帶標(biāo)簽的語(yǔ)句:為了在前提循環(huán)中很好的區(qū)分是哪個(gè)循環(huán)的break和continue,可以使用一個(gè)標(biāo)簽來(lái)標(biāo)記一個(gè)循環(huán)體或者條件語(yǔ)句
//蛇與梯子的升級(jí)版:剛好落到最后一個(gè)格子才算勝利
let geNum2 = 25;//表格的總數(shù)量
var geArr2 = [Int](repeating: 0, count: geNum2+1);//初始化每個(gè)格子的規(guī)則 都為0
geArr2[3] = 8 //如果到了格子3招盲,就加8剥险,直接爬到格子11
geArr2[6] = 11 //如果到了格子6,就加11宪肖,直接爬到格子17
geArr2[9] = 9 //如果到了格子9表制,就加9,直接爬到格子18
geArr2[10] = 2 //如果到了格子10控乾,就加2么介,直接爬到格子12
geArr2[14] = -10 //如果到了格子14,就減10蜕衡,會(huì)直接滑到格子4
geArr2[19] = -11 //如果到了格子19壤短,就減11,直接滑到格子8
geArr2[22] = -2 //如果到了格子22慨仿,就減2久脯,直接滑到格子20
geArr2[24] = -8 //如果到了格子24,就減8镰吆,直接滑到格子16
var currentGe2 = 0 //記錄當(dāng)前所在的格子(從0開(kāi)始)
var diceNum2 = 0 //記錄每次擲骰子的數(shù)(模擬按每次+1:1帘撰、2、3万皿、4摧找、5、6牢硅、1)
gameLoop: while currentGe2 != geNum2 { //該循環(huán)的標(biāo)簽為gameLoop,只要當(dāng)前格子不在終點(diǎn)格子上就循環(huán)
diceNum2 += 1//每次擲骰子數(shù)都在上次擲骰子的數(shù)的基礎(chǔ)上+1
if diceNum2 == 7 { //如果超過(guò)了6蹬耘,就回到1,繼續(xù)
diceNum2 = 1
}
switch currentGe2 + diceNum2 {//當(dāng)前格子數(shù) + 骰子數(shù)
case geNum2://正好在終點(diǎn)格子上
break gameLoop //結(jié)束gameLoop的while循環(huán)(如果break后面沒(méi)有帶上while循環(huán)的標(biāo)簽gameLoop减余,那么他僅僅是中斷了switch語(yǔ)句)
case let newSquare where newSquare > geNum2: //超過(guò)了終點(diǎn)格子--啥也不做综苔,下一次循環(huán)
continue gameLoop //結(jié)束本輪gameLoop循環(huán),開(kāi)始下一次gameLoop循環(huán)
default://沒(méi)有到終點(diǎn)位岔、也沒(méi)有超過(guò)終點(diǎn)
currentGe2 += diceNum2 //每次都往前移動(dòng)擲出來(lái)的骰子數(shù)個(gè)格子
if currentGe2 < geArr2.count {//如果游戲沒(méi)有結(jié)束
currentGe2 += geArr2[currentGe2]// 額外再滿足一下游戲的規(guī)則(上升或下滑)
print("當(dāng)前格子數(shù)是:\(currentGe2)")
}
}
}
print("帶標(biāo)簽的游戲結(jié)束")
07.Swift條件和循環(huán)語(yǔ)句
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門做粤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人捉撮,你說(shuō)我怎么就攤上這事怕品。” “怎么了巾遭?”我有些...
- 文/不壞的土叔 我叫張陵肉康,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我灼舍,道長(zhǎng)吼和,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任骑素,我火速辦了婚禮炫乓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘献丑。我一直安慰自己末捣,他們只是感情好,可當(dāng)我...
- 文/花漫 我一把揭開(kāi)白布创橄。 她就那樣靜靜地躺著箩做,像睡著了一般。 火紅的嫁衣襯著肌膚如雪妥畏。 梳的紋絲不亂的頭發(fā)上卒茬,一...
- 那天,我揣著相機(jī)與錄音咖熟,去河邊找鬼圃酵。 笑死,一個(gè)胖子當(dāng)著我的面吹牛馍管,可吹牛的內(nèi)容都是我干的郭赐。 我是一名探鬼主播,決...
- 文/蒼蘭香墨 我猛地睜開(kāi)眼确沸,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼捌锭!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起罗捎,我...
- 序言:老撾萬(wàn)榮一對(duì)情侶失蹤观谦,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后桨菜,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體豁状,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡捉偏,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了泻红。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片夭禽。...
- 正文 年R本政府宣布潮梯,位于F島的核電站,受9級(jí)特大地震影響惨恭,放射性物質(zhì)發(fā)生泄漏秉馏。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一喉恋、第九天 我趴在偏房一處隱蔽的房頂上張望沃饶。 院中可真熱鬧,春花似錦轻黑、人聲如沸糊肤。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)馆揉。三九已至,卻和暖如春抖拦,著一層夾襖步出監(jiān)牢的瞬間升酣,已是汗流浹背。 一陣腳步聲響...
- 正文 我出身青樓复颈,卻偏偏與公主長(zhǎng)得像绩聘,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子耗啦,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- 一凿菩、需求 寫(xiě)一個(gè)程序打印1到100這些數(shù)字。但是遇到數(shù)字為3的倍數(shù)的時(shí)候帜讲,打印“Fizz”替代數(shù)字衅谷,5的倍數(shù)用“B...
- 更新:2018.05.24 整理了一下demo:SwiftDemo 1.循環(huán)語(yǔ)句 1.1for循環(huán) Swfit中的...
- for循環(huán) Swift提供了兩種for循環(huán)語(yǔ)句,一種是C語(yǔ)言的for循環(huán):條件遞增,這種方式在SWift3.0中遺...
- 斷斷續(xù)續(xù)看了一個(gè)月左右获黔,主要分了兩個(gè)階段1-4章和5-10章蚀苛。 第一階段描述了一些關(guān)于冥想的知識(shí)例如通過(guò)呼吸實(shí)現(xiàn)自...
- 凱班四人終于趕上了我,我們一路都沒(méi)有交談肢执,只是默默地飛奔在樹(shù)林中枉阵。無(wú)線電從上次通話后就完全中斷了译红,現(xiàn)在的情形预茄,只能...