序言
本文為入門教程:主要針對(duì)無(wú)任何編程基礎(chǔ)或是想了解IOS/Swfit編程開發(fā)的小伙伴。
若本文讓你感到任何不適算行,頭暈想吐等癥狀梧油,嘿嘿嘿···本人概不負(fù)責(zé)!V菪稀儡陨!
傳送門
由于本教程是連載類型,為了各位看客老爺跟加直觀的欣賞。
第一課:http://www.reibang.com/p/8e8ff60121c4
第二課:http://www.reibang.com/p/8cdabd470f6f
第四課: http://www.reibang.com/p/55ca9d54a610
概述
學(xué)習(xí)一門新的語(yǔ)言迄委,首先肯定要先學(xué)習(xí)它的語(yǔ)法褐筛,結(jié)構(gòu)类少。Swift和C或其他語(yǔ)言的語(yǔ)法有很多差異叙身,在Swift不用聲明庫(kù)函數(shù),不用寫main函數(shù)硫狞,也不用在每句話的結(jié)束寫分號(hào)····
語(yǔ)法
1.如果我們想在屏幕上打印"Hello,Word!"這句話信轿,我可以直接在編譯器中寫這行代碼。
print("Hello,Word!")
不用做更多的操作残吩,就可以得到結(jié)果
2.定義變量和常量财忽。
let myConstant = 14 //定義一個(gè)常量為myConstant = 14 常量是不可改變的量
var myVariable = 13
myVariable = 14 //定義一個(gè)變量為myVariable = 13 然后改變它的值,將14賦給myVariable。現(xiàn)在myVariable的值為14泣侮。
3.字符串插值
字符串插值的意思是在你print的過(guò)程中即彪,將你定義的常量或變量插入你要輸出的字符串中,我們用第一點(diǎn)的print("Hello,Word!")和第二點(diǎn)定義的變量做試驗(yàn)活尊。
print("Hello,\(myConstant)Word!")
print("Hello,Word!\(myVariable)")
以上是程序運(yùn)行結(jié)果
4.注釋和其他語(yǔ)言相同隶校,在同一行代碼中 不用書寫分號(hào)。
5.類型推斷
在swift中 如果可以的話 盡可能省略類型標(biāo)記蛹锰,讓swift自己推斷類型
6.關(guān)于Swift中類型int深胳,float,double相關(guān)的
let three = 3
let pointOneFourOneFiveNine = 0.14159
let pi = Double(three) + pointOneFourOneFiveNine
Double(three) 和C語(yǔ)言的強(qiáng)制轉(zhuǎn)換有很大區(qū)別
Double(three) swift 中是將three這個(gè)數(shù)據(jù)的值取出來(lái)铜犬,從新定義一個(gè)Double類型的變量舞终,并將Three的值賦這個(gè)變量。
7.元組
元組是用一個(gè)變量或常量癣猾,保存多項(xiàng)數(shù)據(jù)
let http404Error = (404, "Not Found")
// http404Error is of type (Int, String), and equals (404, "Not Found")
下劃線的意思 忽略這一項(xiàng)
let (justTheStatusCode, _) = http404Error
print("The status code is \(justTheStatusCode)")
// Prints "The status code is 404
8.運(yùn)算符
運(yùn)算符 可以分為一元運(yùn)算符敛劝,二元運(yùn)算符,三元運(yùn)算符纷宇。
一元運(yùn)算符
數(shù)字前面代表數(shù)字正負(fù)的正負(fù)號(hào)是唯一的一元運(yùn)算符 eg: -8,-14,+8(正數(shù)我們一般省略前面的正號(hào)寫為:8)
二元運(yùn)算符
1.賦值運(yùn)算符
let b = 10
var a = 5
a = b
// a is now equal to 10
2.關(guān)系運(yùn)算符
1 == 1
2 != 1
2 > 1
1 < 2
1 >= 1
2 <= 1
3.算術(shù)運(yùn)算符:加減乘除取余
1 + 2 // equals 3
5 - 3 // equals 2
2 * 3 // equals 6
10.0 / 2.5 // equals 4.0
9 % 2 // equals 1
三元運(yùn)算符
讓c 取a 和b中較小的值
let a =5 , b=10
let c = a < b ? a : b
問(wèn)號(hào)前面是一個(gè)產(chǎn)生Bool類型的變量攘蔽,常量或表達(dá)式
9.Parentheses 圓括號(hào)的作用
可以使用圓括號(hào)改變運(yùn)算順序 , 如果不清楚運(yùn)算的執(zhí)行程序也可以直接使用圓括號(hào)來(lái)改變運(yùn)算順序呐粘。
10.容器類型-數(shù)組
數(shù)組是一個(gè)有序的集合
var threeDoubles = [Double](count: 3, repeatedValue: 0.0)
var array1 = [Int]()
var array2: [Int] = []
var array3 = [99,12,34,156,7]
var array4 = [Int](count: 100, repeatedValue: 1)
var arrayString1 = [String]()
var arrayString2: [String] = []
var arrayString3 = ["abc","def","ghi","apple","orange"]
var arrayString4 = [String](count: 100, repeatedValue: "")
兩個(gè)數(shù)組可以相加
var anotherThreeDoubles = [Double](count: 3, repeatedValue: 2.5)
// anotherThreeDoubles is of type [Double], and equals [2.5, 2.5, 2.5]
var sixDoubles = threeDoubles + anotherThreeDoubles
// sixDoubles is inferred as [Double], and equals [0.0, 0.0, 0.0, 2.5, 2.5, 2.5]
向數(shù)組中添加元素的方法
shoppingList.append("Flour")
//可以使用append這個(gè)函數(shù)
shoppingList += ["Baking Powder"]
// shoppingList now contains 4 items
shoppingList += ["Chocolate Spread", "Cheese", "Butter"]
//也可以用+=向數(shù)組中添加一個(gè)或多個(gè)元素
數(shù)組的第一個(gè)元素的下標(biāo)是從0開始的 而不是1
對(duì)數(shù)組進(jìn)行遍歷(迭代)
let shoppingList = ["Six egg","Milk","Flour","Baking Powder","Bananas"]
for item in shoppingList {
print(item)
}
for (index, value) in shoppingList.enumerate() {
print("Item \(index + 1): \(value)")
}
// Item 1: Six eggs
// Item 2: Milk
// Item 3: Flour
// Item 4: Baking Powder
// Item 5: Bananas”
控制流程
控制流程
1.順序結(jié)構(gòu)
程序按正常順序執(zhí)行满俗。
2.分支結(jié)構(gòu)
3.循環(huán)結(jié)構(gòu)
//循環(huán)
//第一種循環(huán)
import Foundation
var i = 1
while i <= 10 {
print("\(i)")
print("Hello, World!")
i += 1//i++
}
//第二種循環(huán) 這種循環(huán)和上一種循環(huán)主要的區(qū)別是 --repeat循環(huán)至少執(zhí)行一次
var i = 1
repeat{
print("\(i).Hello,Word")
i += 1
}while i <= 100
//第三種循環(huán)
for i in 1...10{
print("\(i).Hello,World!")
}
// 不想用循環(huán)變量 i可以使用 _ 來(lái)省略i
這三個(gè)結(jié)構(gòu)包括了所有的代碼結(jié)構(gòu)
為了幫助我們理解上述的控制流程,我們來(lái)做幾個(gè)練習(xí)作岖。廢話不多說(shuō)唆垃,直接上干貨。
1.猜數(shù)字
題目要求:書寫一段Swift代碼實(shí)現(xiàn)痘儡,隨機(jī)出現(xiàn)一個(gè)1-100的數(shù)字辕万,讓用戶猜這個(gè)數(shù)字是幾,每次提示用戶猜的數(shù)字是比實(shí)際數(shù)字大還是小,直到用戶猜中為止渐尿。
let answer = Int(arc4random_uniform(100)) + 1
var thyAnswer:Int
var counter = 0
repeat{
counter += 1
print("請(qǐng)輸入你猜的數(shù)字:",terminator:"")
thyAnswer = inputInt()
if thyAnswer > answer{
print("猜小一點(diǎn)")
}
else if thyAnswer < answer{
print("猜大一點(diǎn)")
}
else{
print("恭喜你猜對(duì)了醉途!您一共猜了\(counter)次")
}
}while thyAnswer != answer
if counter > 7{
print("你的智商該充值了!W┤住隘擎!")
}
2.得出1-100的素?cái)?shù)
//得出1-100的素?cái)?shù)
func isPrime(n: Int) -> Bool{
var i = 2
while i <= Int(sqrt(Double(n))){
if n % i == 0{
return false
}
i += 1
}
//如果上面的循環(huán)沒(méi)有返回false 就說(shuō)明在2到n開根號(hào)之間沒(méi)有n的因子 因此返回true 表示n是素?cái)?shù)
return true
}
for n in 1...100{
if isPrime(n){
print(n)
}
}
這段代碼并不難,主要的是代碼優(yōu)化凉夯,我開始在While是做了n次循環(huán)货葬,經(jīng)過(guò)優(yōu)化后只用做根號(hào)n次的循環(huán),大大減少了循環(huán)的數(shù)量劲够,加快了程序執(zhí)行的時(shí)間震桶。
3.百錢白雞
題目要求:現(xiàn)在有100塊錢,公雞5塊一只征绎,母雞3塊一只蹲姐,小雞1塊三只,現(xiàn)在要用這100塊買100只雞人柿,問(wèn)公雞柴墩,母雞,小雞各有多少只顷扩?
for x in 0...20{
for y in 0...33{
let z = 100 - x - y
if 5 * x + 3 * y + z / 3 == 100 && z % 3 == 0 {
print("公雞:\(x),母雞:\(y),小雞\(z)")
}
}
}
// GET:窮舉法(窮盡所有的可能性直到正確答案)
4.搖色子游戲
題目要求:現(xiàn)有兩人拐邪,一個(gè)玩家,一個(gè)莊家隘截。玩家搖兩個(gè)色子扎阶,如果第一次搖到7,11點(diǎn)玩家勝婶芭,搖到2东臀,3,12莊家勝犀农,搖到其他點(diǎn)數(shù)記住這個(gè)點(diǎn)數(shù)并繼續(xù)搖下一次惰赋;以后每次玩家搖色子的點(diǎn)數(shù)和第一次記住的點(diǎn)數(shù)相同玩家勝,搖到7點(diǎn)莊家勝呵哨。用swift代碼實(shí)現(xiàn)以上要求
func roll() -> Int{
return Int(arc4random_uniform(6)) + 1
}
var money = 1000
repeat{
print("玩家總資產(chǎn):¥\(money)元")
var debt:Int
repeat{
print("請(qǐng)下注:",terminator:"")
debt = inputInt()
}while debt <= 0 || debt > money
var needsGoOn = false
let fristPoint = roll() + roll()
print("玩家搖出了\(fristPoint)")
switch fristPoint{
case 7,11:
money += debt
print("玩家勝!!!")
case 2,3,12:
money -= debt
print("莊家勝!!!")
default:
needsGoOn = true //游戲繼續(xù)
}
while needsGoOn{
let currentPoint = roll() + roll()
print("玩家搖出了\(currentPoint)")
if currentPoint == 7 {
money -= debt
print("莊家勝!!!")
needsGoOn = false
}
else if currentPoint == fristPoint{
money += debt
print("玩家勝!!!")
needsGoOn = false
}
}
}while money > 0
print("你破產(chǎn)了A薇簟!C虾Α拒炎!")
5.排序選擇
題目要求:一個(gè)數(shù)組中無(wú)序的數(shù)字,使用簡(jiǎn)單選擇排序法排序挨务。ps:簡(jiǎn)單選擇排序:每次從剩下元素中找最小的元素放到對(duì)應(yīng)的位置
var array = [27,45,78,58,44,89,12,5]
for i in 0..<array.count - 1{
var mindex = i
for j in i+1..<array.count{
if array[j] < array[mindex]{
mindex = j
}
}
(array[i],array[mindex]) = (array[mindex],array[i])
}
print(array)
6.冒泡排序
題目要求:一個(gè)數(shù)組中無(wú)序的數(shù)字击你,使用冒泡排序法排序玉组。ps:冒泡排序:兩個(gè)數(shù)字排序?qū)⒋蟮臄?shù)字排在后面。
var array = [27,45,78,58,44,89,12,5]
for i in 0..<array.count - 1{
var swapped = false
for j in 0..<array.count - 1 - i{
if array[j] > array[j+1]{
(array[j],array[j+1]) = (array[j+1],array[j])
swapped = true
}
}
if swapped == false // if !swapped
{
break
}
}
print(array)