Swift 語(yǔ)言學(xué)習(xí)筆記_1

About me: 在學(xué)習(xí)Swift之前完完全全的零基礎(chǔ)編程,不知道變量與常量區(qū)別的那種零基礎(chǔ)。

教程主要看 ??http://www.runoob.com/swift/swift-environment.html? 和官方文檔的原版對(duì)比著看https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/GuidedTour.html ? 我寫(xiě)下來(lái)的筆記一般都是上述教程沒(méi)有說(shuō)明的,需要自己去查的。

其它參考:swift官方網(wǎng)站:https://swift.org/

2017-2-19


```

import UIKit ? ? ?//想創(chuàng)建IOS playground,需要引入import UIKit

var str = "Hello,playground" ? ? ?//第一行程序

print(str)

print("hello,Youngxkk")

/*print是輸出顯示打印的意思,標(biāo)記是:?jiǎn)卧~,符號(hào)。tips:需要加上雙引號(hào)的情況是指要打印的字符串不是來(lái)自變量或者常量,也不涉及到其他代碼的字符串。不用加雙引號(hào)的情形是打印某個(gè)變量*/

"hello,world" //是字符串,是字符的序列集合,多個(gè)字母單詞

"a"http://是字符,也就是指的單個(gè)字母

```


//常量的命名可以由字母數(shù)字和下劃線組成。

```

let _name = "youngxkk"

print(_name)

let 你好 = "hello or hi"

print(你好)

let name = "Youngxkkk"

let site = "www.youngxkk.com"

print("\(name)的網(wǎng)站地址是:\(site)")

```


//變量聲明,在使用變量聲名前,你需要使用var關(guān)鍵字聲明它,如下

var meaningOfLife = 42? ? ? //變量命名

print(meaningOfLife)? ? ? //變量輸出

var youngxkk = "百科小王子"? ? ? //變量命名

print(youngxkk)? ? ? //變量輸出

print("youngxkk,u r god\(meaningOfLifetest)")? ? ? //變量輸出


//標(biāo)識(shí)符號(hào):區(qū)分大小寫(xiě)MY與my是兩上不同的標(biāo)識(shí)符。


//swif字面量,直接了當(dāng)?shù)闹赋鲎约旱念?lèi)型并為亦是進(jìn)行賦值的值

42 ? ? ?//整數(shù)形

3.14159 ? ? ? //浮點(diǎn)型

"hello" ? ? ? //字符串型

true ? ? ?//布爾型,英文=bool , 類(lèi)似設(shè)計(jì)工具中的布爾運(yùn)算,但又不完全相同,

//swift有兩個(gè)布爾值bool的類(lèi)型。也就是兩個(gè)布爾常量,true和false,也就是他們只能是真或是假。通俗的講就是非黑即白


/*Swift的可選(Optionals)類(lèi)型,用于處理值缺失的情況,表示那兒有一個(gè)值"x"或者那兒沒(méi)有值,

swift定義"?",問(wèn)號(hào)作為命名類(lèi)型Optional的簡(jiǎn)寫(xiě)*/

var optionalInteger: Int?

va roptionalInteger: Optional<Int> ? ? ?//這一行不知為啥會(huì)報(bào)錯(cuò),至少?zèng)]解決???


//如果一個(gè)可選類(lèi)型的實(shí)例包含一個(gè)值,可以在其后面加上后綴操作符"!"來(lái)訪問(wèn)這個(gè)值

OptionalInteger = 42

OptionalInteger!


let maxumumNumberOfLoginAttempts = 10

var currentLoginAttempt = 0

//常量,最大登錄次數(shù),變量,已經(jīng)登錄次數(shù)

var x = 0.0,Y = 0.0,Z = 0.0

//聲名多個(gè)變量,逗號(hào)隔開(kāi)。

var a = 2,b = 3,c = 4

print(a)

print(x)


var welcomeMessage: String

//歡迎提示的字符串,聲明一個(gè)類(lèi)型為string,名字為welcomeMessage的變量。

//welcome的變量“string”可以設(shè)置成任意字符串

welcomeMessage = "hello,world"

var iloveyou: String

iloveyou = "young"

print(iloveyou)

var red,green,blue: Double

//一行中類(lèi)型的多個(gè)變量,逗號(hào)分割,最后一個(gè)變量名之后添加冒號(hào)和類(lèi)型標(biāo)注

let π = 3.1415926

let你好啊= "hello,world"

/*常量和變量的命名,常量或者變量聲明為確定的類(lèi)型后,不可使用相同的名子在次聲明,或改變存儲(chǔ)的類(lèi)型,常量與變量不可互轉(zhuǎn)。

但可以改變現(xiàn)有的變量值為其它同類(lèi)型的值如下方*/

let constB:Float = 3.24232221

//常量后面的冒號(hào)和Float是類(lèi)型標(biāo)注

var friendlyWelcome = "hello!"

friendlyWelcome = "bonjour!"

//此時(shí),friendlyWelcome輸出的值是"bonjour!",常量值(let)不可以更改

print(welcomeMessage)

print("weilcome to my country \(welcomeMessage)")

//使用雙引號(hào)和括號(hào)前加反斜杠,可以將常量或變量轉(zhuǎn)義

let cat = "animal";print(cat)

//同一行中有多條獨(dú)立語(yǔ)句時(shí),使用分號(hào)區(qū)分

print(cat)

let minValue = UInt8.min

//minValue為0,是UInt8類(lèi)型

let maxValue = UInt8.max

//maxValue為255,是UInt8類(lèi)型

//double表示64位浮點(diǎn)數(shù),精度很高,有15位,F(xiàn)loat表示32位浮點(diǎn)數(shù),只有6位。

let meaningOfLife = 42

//meaningOfLife會(huì)被推測(cè)為Int類(lèi)型,整數(shù)類(lèi)型。打印的時(shí)候提示框中顯示了int

print(meaningOfLife)

let pi = 3.1415926

//pi會(huì)被推測(cè)為Double類(lèi)型,下一行打碼打印的時(shí)候彈窗提示框提示了Double

print(pi)

let anotherPi = 3 + 0.1415926

print(anotherPi)

/*anotherPi會(huì)被推測(cè)為Double類(lèi)型

因?yàn)楫?dāng)表達(dá)示中同時(shí)出現(xiàn)整數(shù)和浮點(diǎn)數(shù),會(huì)被推斷為Double類(lèi)型*/

/*

以上所了解的,提到了基本的數(shù)據(jù)類(lèi)型,包括整數(shù)int,浮點(diǎn)數(shù)Double和Float,布爾類(lèi)型Bool以及字符串類(lèi)型String,此外Swift還提供了其它更強(qiáng)大的數(shù)據(jù)類(lèi)型:Optional,Array,Dictionaty,Struct,Clsaa等

*/

//String型字面量,是由("")包含在內(nèi)的廣西字符集,如下

let wisewords = "\"我是百科小王子\" -"

let dollarsign = "\u{24}"

let blackheart = " \u{2665}"

//這里遇到一個(gè)問(wèn)題,swift2.1及之前的版本都沒(méi)有在24外面加上{}符號(hào),所以編譯一直出錯(cuò),看了官方的3.0英文原版文檔加是{}才正常。

/*

順便記一下轉(zhuǎn)義字符及含義\0空字符,\b退格,\f換頁(yè),\n換行,

\r回車(chē),\t水平制表,\v垂直制表,重要的點(diǎn)\'是單引號(hào),\"是雙引號(hào)

下面嘗試一下空格及換行

*/

let StringLiterals = "helloworld\n\n歡迎來(lái)查看我的swift學(xué)習(xí)筆記:\'www.youngxkk.com\'"

print(StringLiterals)

//算術(shù)運(yùn)算符

var A = 10

var B = 20

print(A + B)

print("A - B = \(A - B)")

//比較運(yùn)算符

print(A == B)//==是等于的意思

print(A != B)//!=是不等于的意思

print(A > B)//>是大于的意思

print(A <= B)//<=是小于或等于的意思,因?yàn)榻Y(jié)果為true

/*邏輯運(yùn)算符,下主是三個(gè)主要說(shuō)明

&&邏輯于。如何運(yùn)算符兩側(cè)都為T(mén)RUE則為T(mén)RUE

||邏輯或。如果運(yùn)算符兩側(cè)至少有一個(gè)為T(mén)RUE則為T(mén)RUE

!邏輯非。布爾值取反,可以全true變false,使flase變?yōu)閠rue

*/

var C = true

var D = false

print("C && D結(jié)果為:\(C && D)")

print("C || D結(jié)果為:\(C || D)")

print(!C)

print(!D)

//位運(yùn)算符號(hào)用來(lái)對(duì)二進(jìn)制進(jìn)行操作

//賦值運(yùn)算

var f = 10

var g = 20

var h = 100

h = h + 10//他的本意是本身的值在加上10,然后賦值給本身,為了簡(jiǎn)化,這個(gè)代碼也可以寫(xiě)成h+=10

h = f + g

print("h結(jié)果為:\(h)")

//h是變量,不可以是常量,

h += g

print("h結(jié)果為:\(h)")//相當(dāng)于h=h+g

h -= f

print("h結(jié)果為:\(h)")//相當(dāng)于h=h-f

h *= g

print("h結(jié)果為:\(h)")//相當(dāng)于h=h*g

h /= f

print("h結(jié)果為:\(h)")

//區(qū)間運(yùn)算符

print("區(qū)間運(yùn)算符1到5")

for index in 1...5 {

print("\(index)* 5 = \(index * 5)")

}

print("閉區(qū)間運(yùn)算符1之后,小于5")

for index in 1..<5 {

print("\(index)* 5 = \(index * 5)")

}

//其它運(yùn)算符號(hào)

var j = 10

var k = 20

var l = true

var m = false

print("j+k= \(j + k)")

print("k-j= \(k - j)")

print("三元運(yùn)算:\(l?j : k)")

print("三元運(yùn)算:\(m?j : k)")

//三元運(yùn)算符條件是"?x:y",引號(hào)內(nèi)的部分,如果添加為treue,值為x,否則為y

/*1,運(yùn)算符的優(yōu)先級(jí),指針最優(yōu)先,單目運(yùn)算優(yōu)于雙目運(yùn)算,例如正負(fù)號(hào)

2,先乘除(模),后加減

3,先算術(shù)運(yùn)算,后移位運(yùn)算,最后位運(yùn)算。請(qǐng)?zhí)貏e注意:1 << 3 + 2 & 7等價(jià)于(1 <<(3 + 2))&7

4,邏輯運(yùn)算最后計(jì)算

3和4暫時(shí)不懂,需要在查資料

*/

var n = 0

n = 2 + 3 * 4 / 6

print(n)

//上面表達(dá)示算法是3先乘以4在除6在加2等于4

/*條件語(yǔ)句

if語(yǔ)句:"由一個(gè)布爾表達(dá)式和一個(gè)或多個(gè)執(zhí)行語(yǔ)句組成"

內(nèi)嵌if語(yǔ)句:"你可以在if或else if中內(nèi)嵌if或else if語(yǔ)句。"

switch語(yǔ)句:" switch語(yǔ)句允許測(cè)試一個(gè)變量等于多個(gè)值時(shí)的情況。"

*/

var ab = 10//檢測(cè)條件

if ab < 20 {//如果條件語(yǔ)句為true,執(zhí)行以下程序,if語(yǔ)句要帶{}這種擴(kuò)號(hào)

print("ab小于20")

}

print("ab的變量值為\(ab)")

//if...else :"else語(yǔ)句在布爾表達(dá)式為false時(shí)執(zhí)行"

var bc:Int = 30

if bc > 100 {

print("bc大于100")

}else{

print("bc小于100")

}

print("bc的變量為\(ab)")

/*if...else if...else語(yǔ)句:"if后可以有可選的else if...else語(yǔ)句,else if...else語(yǔ)句常用于多個(gè)條件判斷。"

*/

var cd = 100

if cd == 20 {

print("cd的值等于20");

} else if cd == 50 {

print("cd的值等于50");

} else {

print("沒(méi)有匹配的條件");

}

print("cd的值等于\(cd)")

//switch語(yǔ)句的解釋:switch就像是路由器,收到一個(gè)變量在去決定進(jìn)行不同的操作,如果情況是1,那么值就是1,那就是case1。fallthrough,為連續(xù)運(yùn)行的意思,因?yàn)閟wift默認(rèn)不執(zhí)行下去,其它的語(yǔ)言需要要case后面緊跟break,用break終止運(yùn)行。

var abc = 10

switch abc{

case 100 :

print("abc的值為100")

case 10,20 :

print("abc的值為10或20")

case 50 :

print("abc的值為50")

default :

print("默認(rèn)case")

}

print("abc的值為\(abc)")

//下面的實(shí)例使用fallthrough

var az = 100

switch az {

case 50 :

print("az的值為50")

fallthrough

case 100,200 :

print("az的值為100或200")

fallthrough

case 20 :

print("az的值為20")

default :

print("默認(rèn)case")

}

//swift for循環(huán)

var someInts:[Int]=[10,20,30]

for index in 0 ..< 3

{

print("索引[\(index)]對(duì)應(yīng)的值為\(someInts[index])")

}

//swift字符串

var StringA = ""

if StringA.isEmpty {

print("String是空的")

}else{

print("String不是空的")

}

var StringB = String()

if StringB.isEmpty {

print("StringB是空的")

}else{

print("String不是空的")

}

/*

Swift支持以下幾種字符串函數(shù)及運(yùn)算符,函數(shù)/運(yùn)算符&描述

1

isEmpty

判斷字符串是否為空,返回布爾值

2

hasPrefix(prefix: String)

檢查字符串是否擁有特定前綴

3

hasSuffix(suffix: String)

檢查字符串是否擁有特定后綴。

4

Int(String)

轉(zhuǎn)換字符串?dāng)?shù)字為整型。實(shí)例:

let myString: String = "256"

let myInt: Int?= Int(myString)

5

String.characters.count

計(jì)算字符串的長(zhǎng)度

6

utf8

您可以通過(guò)遍歷String的utf8屬性來(lái)訪問(wèn)它的UTF-8編碼

7

utf16

您可以通過(guò)遍歷String的utf8屬性來(lái)訪問(wèn)它的UTF-16編碼

8

unicodeScalars

您可以通過(guò)遍歷String值的unicodeScalars屬性來(lái)訪問(wèn)它的Unicode標(biāo)量編碼.

9

+

連接兩個(gè)字符串,并返回一個(gè)新的字符串

10

+=

連接操作符兩邊的字符串并將新字符串賦值給左邊的操作符變量

11

==

判斷兩個(gè)字符串是否相等

12

<

比較兩個(gè)字符串,對(duì)兩個(gè)字符串的字母逐一比較。

13

!=

比較兩個(gè)字符串是否不相等。

*/

//字符串中插入值

var varA = 10

let letB = 20

var varC = 40

var varD = varA * letB - varC

var varE = "\(varA)+ \(letB)- \(varC)"

print(varD)

print(varE)

//字符串可以通過(guò)+號(hào)來(lái)連接

let name2 = "youngxkk"

let hi2 = "hellomike"

var String2 = hi2 + name2

print(String2)

//字符串長(zhǎng)度使用String.characters.count屬性來(lái)計(jì)算,如下

print("\(String2)的長(zhǎng)度為\(String2.characters.count)")

//?:運(yùn)算符

//條件運(yùn)算符號(hào)?:可以用來(lái)代替if...else語(yǔ)句,他的一般形式如下:

(myString != nil)?myString : myString;

//myString是表達(dá)式,原文的“Exp1?Exp2 : Exp3;”報(bào)錯(cuò),所以嘗試了myString,

/*其中,Exp1、Exp2和Exp3是表達(dá)式。請(qǐng)注意,冒號(hào)的使用和位置。

?表達(dá)式的值是由Exp1決定的。如果Exp1為真,則計(jì)算Exp2的值,結(jié)果即為整個(gè)?表達(dá)式的值。如果Exp1為假,則計(jì)算Exp3的值,結(jié)果即為整個(gè)?表達(dá)式的值。

這個(gè)地方不理解,需要查資料

*/

let decimalInteger = 23

let binaryInteger = 0b10001

let octalInteger = 0o21

let hexadecimalInteger = 0x11

let maxInt8: Int8 = Int8.max

let minInt32: Int32 = Int32.min

let twoThousand: UInt16 = 2000

let one: UInt8 = 1

let twoThousandAndOne = twoThousand + UInt16(one)

//UInt8和UInt16是兩個(gè)類(lèi)型,不能直接相加,可以調(diào)用

let integerPi = Int(pi)

/*integerPi等于3,所以被推測(cè)為Int類(lèi)型,

當(dāng)然使用此方法浮點(diǎn)數(shù)會(huì)被截?cái)?,小?shù)點(diǎn)后面的都沒(méi)了*/

//類(lèi)型別名

typealias AudioSample = UInt16

//定義好類(lèi)型別名后,可以在使用使用原始名的地方使用別名

var maxAmplitudeFound = AudioSample.min

//maxAmplitudeFound現(xiàn)在是0

//布爾值,只有兩個(gè)true or false

let orangesAreOrange = true

let turnipsAreDelicious = false

//下方是非常無(wú)比重要的條件語(yǔ)句:if語(yǔ)句,布爾值非常有用

if turnipsAreDelicious {

print("mum,tasty turnips")

}else{

print("Eww,turnips are horrible.")

}

//輸出“Eww.turnips are horrible.”

//下方是控制流使用for ..in ...語(yǔ)法

for index in 1...6{

print("\(index)times 6 is \(index * 2)")

}

let names =["mike","young","jack","mianmian"]

for name in names {

print("hello,\(names)")

}

//tuples元組把多個(gè)值組合成一個(gè)復(fù)合值,內(nèi)可以是任何類(lèi)型

let http404error =(404,"not found")

//一個(gè)類(lèi)型為(Int,String)的元組

let(statusCode,statusMessage)= http404error

print("The status code is \(statusCode)")

print("the statusMessage is \(statusMessage)")

//元組的內(nèi)容被分解成單獨(dú)的常量和變量

print("The status code is \(http404error.0)")

print("the status message is \(http404error.1)")

let http200Status =(statusCode: 200,description: "ok")

print("The Status code is \(statusCode)")

print("The Status code is \(http200Status.description)")

//可以用元組中的命名,也可以用.0和.1來(lái)表示函數(shù)返回值

//可選類(lèi)型

let possibleNumber = "123"

let convertedNumber = Int(possibleNumber)

var serverResponseCode: Int?= 404

//serverResponseCode包含一個(gè)可選的Int值404

serverResponseCode = nil

var surveyAnswer: String?

/*Swift的nil和Objective-C中的nil并不一樣。在Objective-C中,nil是一個(gè)指向不存在對(duì)象的指針。在Swift中,nil不是指針——它是一個(gè)確定的值,用來(lái)表示值缺失。任何類(lèi)型的可選狀態(tài)都可以被設(shè)置為nil,不只是對(duì)象類(lèi)型。*/

//if語(yǔ)句以及強(qiáng)制解析

//下方是獲取設(shè)備信息及打印出來(lái)

let mainBundle = NSBundle.mainBundle()

let identifier = mainBundle.bundleIdentifier

let info= mainBundle.infoDictionary

let bundleId= mainBundle.objectForInfoDictionaryKey("CFbundleName")

let version= mainBundle.objectForInfoDictionaryKey("CFBundleShortVersionString")

print("identifier:\(identifier)")

print("bundleId:\(bundleId)")

print("version:\(version)")

print("info:\(info)")

//在statues bar上顯示風(fēng)火輪效果

UIApplication.sharedApplication().networkActivityIndicatorVisible = true;

var dic =[0:4,1:5,2:6,3:7]

var newDic = dic

//check dic and newdic

dic[0]= 8

dic

newDic

/*集合類(lèi)型(Collection Types)

Swift語(yǔ)言提供Arrays、Sets和Dictionaries三種基本的集合類(lèi)型用來(lái)存儲(chǔ)集合數(shù)據(jù)。數(shù)組(Arrays)是有序數(shù)據(jù)的集。集合(Sets)是無(wú)序無(wú)重復(fù)數(shù)據(jù)的集。字典(Dictionaries)是無(wú)序的鍵值對(duì)的集。

*/

//arr是數(shù)組,dict是詞典

var array =[1,2,3,"hello","world",youngxkk,5,"6"]//其中的youngxkk為變量

array[2]

array[4]

array[7]

array[5]//多0開(kāi)始,其中的第6個(gè),是youngxkk,自動(dòng)顯示字符串

//字典類(lèi)型快捷語(yǔ)法Swift的字典使用Dictionary定義,其中Key是字典中鍵的數(shù)據(jù)類(lèi)型,Value是字典中對(duì)應(yīng)于這些鍵所存儲(chǔ)值的數(shù)據(jù)類(lèi)型。

var dict =[10:"m",20:"i",30:"k",40:"e","mike":9]

dict[10]

dict[30]

dict["mike"]

//:-----------分割線------------,嘗試一下HASH值,看有什么區(qū)別

CFHash("world")

CFHash(30)

//創(chuàng)建數(shù)組,使用構(gòu)造語(yǔ)法來(lái)創(chuàng)建一個(gè)由特定數(shù)據(jù)類(lèi)型構(gòu)成的空數(shù)組

var someArray =[1,"hello"]

print(1)

let emptyArray =[String]()

let emptyDictionary =[String: Float]()

//創(chuàng)建一個(gè)帶有默認(rèn)值的數(shù)組

var FourDoubles =[Double](count: 4,repeatedValue: 0.0)

//FourDoubles是一種[Double]數(shù)組,等價(jià)于[0.0,0.0,0.0]

//通過(guò)兩個(gè)數(shù)組相加創(chuàng)建一個(gè)數(shù)組

var anotherFourDoubles =[Double](count: 4,repeatedValue: 2.5)

//anotherFourDoubles被推斷為[Double],等價(jià)于[2.5,2.5,2.5]

var eightDoubles = FourDoubles + anotherFourDoubles

//eightDoubles被推斷為[Double],等價(jià)于[0,0,0,0,2.5,2.5,2.5]

//字面量構(gòu)造數(shù)組

var shoppingList:[String]=["eggs","fruits"]

/*shoppoingLisr已經(jīng)被構(gòu)造,并且包含兩個(gè)初始項(xiàng)。

shoppingList數(shù)組被聲明為變量(var)而不是常量(let),是因?yàn)橐院罂赡軙?huì)加入更多數(shù)據(jù)*/

//訪問(wèn)和修改數(shù)組(這個(gè)數(shù)組有2個(gè)項(xiàng))

print("the shoppingList contains\(shoppingList.count)items.")

//可以使用布爾值屬性isEmpty作為檢查count的屬性是否為0的捷徑

if shoppingList.isEmpty{

print("shoppingList is empty")

}else{

print("shoppinglist is not empty")}

//也可以使用append(_:)的方法在數(shù)組后面添加新的數(shù)據(jù)項(xiàng)

shoppingList .append("flour")

shoppingList.append("apple")

//除此之外,還可以使用加法賦值運(yùn)算符+=直接在后面添加一個(gè)或多個(gè)數(shù)據(jù)項(xiàng)

shoppingList +=["water","music"]

//下面嘗試一下使用下標(biāo)語(yǔ)法來(lái)獲取數(shù)據(jù)項(xiàng),索引要放在中括號(hào)中

var secondItem = shoppingList[1]

//也可以使用下標(biāo)來(lái)改變某個(gè)索引值對(duì)應(yīng)的數(shù)據(jù)項(xiàng)

shoppingList[2]= "orange"

shoppingList[3...5]=["bananas","cook","coca"]

print(shoppingList)

//我們可以使用for-in循環(huán)來(lái)遍歷數(shù)組中的數(shù)據(jù)項(xiàng)

for items in shoppingList{

print(items)

}

//Sets集合是指無(wú)序無(wú)重復(fù)數(shù)據(jù)的集

//創(chuàng)建一個(gè)空的集合

var letters = Set()

print("letters is of type Set with \(letters.count)items.")

//打印"letters is of type Set with 0 items."通過(guò)構(gòu)造器,這里的letters變量的類(lèi)型被推斷為Set。

var favoriteGenres: Set =["Rock","Classical","hiphop"]

/*例子創(chuàng)建一個(gè)稱之為favoriteGenres的集合來(lái)存儲(chǔ)String類(lèi)型的值:這個(gè)favoriteGenres變量被聲明為“一個(gè)String值的集合”,寫(xiě)為Set。由于這個(gè)特定的集合含有指定String類(lèi)型的值,所以它只允許存儲(chǔ)String類(lèi)型值。這里的favoriteGenres變量有三個(gè)String類(lèi)型的初始值("Rock","Classical"和"Hip hop"),并以數(shù)組字面量的方式出現(xiàn)。

*/

//集合操作你可以高效地完成Set的一些基本操作,比如把兩個(gè)集合組合到一起,判斷兩個(gè)集合共有元素,或者判斷兩個(gè)集合是否全包含,部分包含或者不相交.

let oddDigits: Set =[1,3,5,7,9]

let evenDigits: Set =[0,2,4,6,8]

let singleDigitPrimeNumbers: Set =[2,3,5,7]

oddDigits.union(evenDigits).sort()

//[0,1,2,3,4,5,6,7,8,9]都包含

oddDigits.intersect(evenDigits).sort()

//[]交集之內(nèi)

oddDigits.subtract(singleDigitPrimeNumbers).sort()

//[1,9]不在B里面的,只要A里面。

oddDigits.exclusiveOr(singleDigitPrimeNumbers).sort()

//[1,2,9]交集之外

//While循環(huán)

/*while循環(huán)從計(jì)算單一條件開(kāi)始。如果條件為true,會(huì)重復(fù)運(yùn)行一系列語(yǔ)句,直到條件變?yōu)閒alse。

下方是一個(gè)爬格子的游戲,有梯子和小蛇*/

let finalSquare = 25

var board =[Int](count: finalSquare + 1,repeatedValue: 0)

board[03]= +08;board[10]= +02;board[06]= +11;board[09]= +09;

board[14]= -10;board[19]= -11;board[22]= -02;board[24]= -08;

var square = 0

var diceRoll = 0

while square < finalSquare {

//擲骰子(diceRool)

diceRoll += 1

if diceRoll == 7 { diceRoll = 1 }

//根據(jù)點(diǎn)數(shù)移動(dòng)

square += diceRoll

if square < board.count {

//如果玩家還在棋盤(pán)上,順著梯子上去或者蛇滑下

square += board[square]

}

}

print("game over!")

//下方是Repeat-While循環(huán),finalsquare,board,square,diceRoll初始化值和while值相同

/*

repeat {

//順著梯子爬上去或者順著蛇下來(lái)

square += board[square]*此處報(bào)錯(cuò),不知道為什么,暫時(shí)注銷(xiāo)*

//擲骰子

diceRoll += 1

if diceRoll == 7 { diceRoll = 1 }

//根據(jù)點(diǎn)數(shù)移動(dòng)

square += diceRoll

}while square < finalSquare

print("game over!")

*/

//條件語(yǔ)句,if語(yǔ)句,適用于簡(jiǎn)單的條件

var temperature = 39

if temperature < 40 {

print("the temperature is cold")

}

if temperature < 32 {

print("the temperature is very cole")

}else if temperature >= 39 {

print("the temperature is normal= 39")

}

//Switch語(yǔ)句,更適用于條件較復(fù)雜、可能情況較多且需要用到模式匹配(pattern-matching)

/*switch some value to consider {

case value 1:

respond to value 1

case value 2,

value 3:

repond to value 2 or value 3

dafault:

otherwise,do something else

}

*/

let someCharacter: Character = "e"

switch someCharacter {

case "a","e","o","u":

print("\(someCharacter)is a vowel")

case "b","n","v","p","i","t","r","c":

print("\(someCharacter)is a consonant")

default:

print("\(someCharacter)is not a vowel or a consonant")

}

//switch和case的一些注意點(diǎn),一個(gè)case可以包含多個(gè)模式,中間用逗號(hào)分開(kāi),冒號(hào)結(jié)尾:

//case的分支的模式也可以是一個(gè)值的區(qū)間。

let approximateCount = 99

let countedThing = "moons orbiting Saturn"

var naturalCount: String

switch approximateCount {

case 0:

naturalCount = "no"

case 1..<5:

naturalCount = "a few"

case 5..<12:

naturalCount = "several"

case 12..<100:

naturalCount = "dozens of"

case 100..<1000:

naturalCount = "hundreds of"

default:

naturalCount = "many"

}

print("there are \(naturalCount)\(countedThing)")

//輸出"There are dozens of moons orbiting Saturn."

//元組(Tuple)

let somePoint =(1,1)

switch somePoint {

case(0,0):

print("(0,0)is at the origin")

case(_,0):

print("(\(somePoint.0),0)is on the x-axis")

case(0,_):

print("(0,\(somePoint.1))is on the y-axis")

case(-2...2,-2...2):

print("(\(somePoint.0),\(somePoint.1))is inside the box")

default:

print("(\(somePoint.0),\(somePoint.1))is outside of the box")

}

//輸出"(1,1)is inside the box"

//字典重復(fù)學(xué)習(xí)

var someDict:[Int:String]=[1:"one",2:"two",3:"three"]

print(someDict[1])

var someVar = someDict[1]

print("key2的值為is \(someDict[2])")

print("key1的值為\(someVar)")

//函數(shù)(重點(diǎn))

func sayHello(person: String)-> String {

let greeting = "Hello," + person + "!"

return greeting

}

print(sayHello("mike"))

/*重要的解釋

調(diào)用sayHello(_:)函數(shù)時(shí),在圓括號(hào)中傳給它一個(gè)String類(lèi)型的實(shí)參,例如sayHello("Anna")。因?yàn)檫@個(gè)函數(shù)返回一個(gè)String類(lèi)型的值,sayHello可以被包含在print(_:separator:terminator:)的調(diào)用中,用來(lái)輸出這個(gè)函數(shù)的返回值,正如上面所示。

在sayHello(_:)的函數(shù)體中,先定義了一個(gè)新的名為greeting的String常量,同時(shí),把對(duì)personName的問(wèn)候消息賦值給了greeting。然后用return關(guān)鍵字把這個(gè)問(wèn)候返回出去。一旦return greeting被調(diào)用,該函數(shù)結(jié)束它的執(zhí)行并返回greeting的當(dāng)前值。

你可以用不同的輸入值多次調(diào)用sayHello(_:)。上面的例子展示的是用"Anna"和"Brian"調(diào)用的結(jié)果,該函數(shù)分別返回了不同的結(jié)果。

為了簡(jiǎn)化這個(gè)函數(shù)的定義,可以將問(wèn)候消息的創(chuàng)建和返回寫(xiě)成一句:

*/

func sayHelloAgain(person: String)-> String {

return "hello Again," + person + "!"

}

print(sayHelloAgain("Youngxkk"))

//函數(shù)也可以有無(wú)參函數(shù),例如下面這個(gè)

func sayhelloworld()-> String {

return "hello,wrold"

}

print(sayhelloworld())

//無(wú)返回值函數(shù)

func saygoodbye(personName: String){

print("goodBye,\(personName)")

}

saygoodbye("Youngxkkk")

```

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容