Swift筆記一:基礎(chǔ)部分

基礎(chǔ)部分

簡(jiǎn)介

基本數(shù)據(jù)類(lèi)型

Int : 整型
Double蜒简、Float : 浮點(diǎn)型卷仑。
Bool : 布爾型尸饺。
String :文本型數(shù)據(jù)。
Array眉菱、Set迹栓、Dictionary : 集合類(lèi)型。
Tuple : 元組俭缓。
Optional :可選類(lèi)型克伊。

常量和變量

let : 來(lái)聲明常量。
var : 來(lái)聲明變量华坦。

let maxmunNumberOfLoginAttempts = 10    //常量
var currentLoginAttempt = 0     //變量

類(lèi)型標(biāo)注

//聲明一個(gè)類(lèi)型為String愿吹,名字為welcomeMessage的變量
var welcomeMessage: String

類(lèi)型安全和類(lèi)型推斷

類(lèi)型安全:類(lèi)型安全的語(yǔ)言可以讓你清楚地知道代碼要處理的值的類(lèi)型。編譯代碼的時(shí)候進(jìn)行類(lèi)型檢查惜姐,并把不匹配的標(biāo)記為錯(cuò)誤犁跪。
類(lèi)型推斷:聲明變量的時(shí)候并不一定要賦值和聲明類(lèi)型,類(lèi)型推斷會(huì)幫你確定合適的類(lèi)型。編譯器在編譯代碼的時(shí)候自動(dòng)推斷出表達(dá)式的類(lèi)型耘拇。原理:檢查賦值即可撵颊。
推斷浮點(diǎn)數(shù)的時(shí)候,swift 總會(huì)選擇Double, 而不選擇Float惫叛。

常量名和變量名

輸出常量和變量

func print(_ items: Any..., separator: String = default, terminator: String = default)
  // items: 要輸出的0個(gè)或多個(gè)元素倡勇。
  //separator: 每個(gè)item之間要打印的信息,默認(rèn)是" "
  //terminator: 所有的item打印完成之后要輸出的信息嘉涌。默認(rèn)是換行"\n"

demo:

var name = "river li"
var age = 25
print("the current value of name is \(name), age is \(age)")
  //the current value of name is river li, age is 25

注釋

多行注釋嵌套

/*
    /*
    var a = 12
    var b = 25
    */
    c = 45
*/

分號(hào)

不強(qiáng)制使用妻熊,但一行內(nèi)多有個(gè)語(yǔ)句必須使用分號(hào)隔開(kāi)。

數(shù)字可讀性增強(qiáng)

let a = 1000000
let a = 1_000_000
let b = 123.0012
let b = 000123.0012

整數(shù)轉(zhuǎn)化

  1. Swift 中不允許隱式的類(lèi)型轉(zhuǎn)換仑最。
  2. 字面量相加扔役,類(lèi)型推斷。
let c : Int16 = 5
let d : Int8 = 4
let e = c + d   //錯(cuò)誤警医,編譯保存
print("c+d=\(e)") 

let f = c + Int16(d)  // 正確
print("c+d=\(f)")   

let m = 3 + 12.3    //不報(bào)錯(cuò)亿胸, 類(lèi)型推斷
let h = d + 12.3    //報(bào)錯(cuò)12.3 被推斷成Double

類(lèi)型別名

typealias AudioSample = UInt16

布爾值

let right = true    //Bool
let wrong = false   //Bool
if right {
    print("right")
}else{
    print("wrong")
}
let i = 1
if i {
    // 編譯報(bào)錯(cuò),i類(lèi)型推斷為Int類(lèi)型预皇,不是Bool類(lèi)型侈玄。if的判斷條件只能使用Bool類(lèi)型
}

if i==1 {
    print("right")
}

元組

元組:把多個(gè)值組合成一個(gè)復(fù)合值。元組內(nèi)的值可以是任意類(lèi)型吟温,并不要求是同類(lèi)型的序仙。

let http404Error = (404, "Not Found")

元組內(nèi)容分解:
元組適合臨時(shí)組織值,不適合創(chuàng)建復(fù)雜的數(shù)據(jù)結(jié)構(gòu)鲁豪。

let(statusCode, statusMessage) = http404Error
print("The statusCode is \(statusCode)")
//The status code is 404

print("The statusMessage is \(statusMessage)")
//The status message is Not Found

let(statusCode, _) = http404Error  //只取部分元組信息潘悼,不需要的使用_忽略

//使用下標(biāo)訪(fǎng)問(wèn)
let statusCode = http404Error.0
let statusMessage = http404Error.1

//定義元組指定元素名
let http200Status = (statusCode: 200, description: "OK")
//通過(guò)元素名稱(chēng)來(lái)獲取元素
let statusCode = http200Status.statusCode
let description = http200Status.description

可選類(lèi)型

使用可選類(lèi)型(optionals)來(lái)處理值可能缺失的情況。
Swift中的nil
? Swift中的nil和OC中的nil不一樣爬橡。OC中治唤,nil是一個(gè)指向不存在對(duì)象的指針。Swift中糙申,nil不是指針宾添,它是一個(gè)確定的值,用來(lái)表示缺失郭宝,任何類(lèi)型都可以被設(shè)置為nil辞槐,不只是對(duì)象類(lèi)型。
? nil不能用于不可選的常量和變量。如果代碼中有常量或者變量需要處理值缺失的情況呈队,請(qǐng)把它們聲明成對(duì)應(yīng)的可選類(lèi)型娜膘。
? 如果聲明一個(gè)可選常量或者變量但沒(méi)有賦值,它們會(huì)自動(dòng)被置為nil激挪。

Int(String) //將一個(gè)字符串轉(zhuǎn)換成整數(shù)命爬,要么能轉(zhuǎn)化成功"123", 要么轉(zhuǎn)化不成功"Hello"
let possibleNumber = "123"
let coverteNumber = Int(possibleNumber)
//返回值converteNumber被推斷為Int土匀?  或者 optional Int

Int?    //? 暗示可能是Int值也可能不包含值锦爵。

let m : Int = nil   //報(bào)錯(cuò)
let m : Int?        //m默認(rèn)為nil

可選值的強(qiáng)制解析

當(dāng)你確定可選類(lèi)型有值之后舱殿,你可以在可選的名字后面加一個(gè)感嘆號(hào)(!)來(lái)獲取值。這個(gè)感嘆號(hào)表示“我知道這個(gè)可選有值险掀,請(qǐng)使用它”沪袭。這稱(chēng)謂“可選值的強(qiáng)制解析”
使用!來(lái)獲取一個(gè)不存在的可選值會(huì)導(dǎo)致運(yùn)行時(shí)錯(cuò)誤樟氢。使用冈绊!來(lái)強(qiáng)制解析值之前,一定要確定可選包含一個(gè)非nil的值埠啃。

var a : Int?
a = 40
let b = !a

可選綁定

使用可選綁定來(lái)判斷可選類(lèi)型是否包含值死宣,如果包含就把值賦給一個(gè)臨時(shí)常量或者變量。

var a : Int? = 16
// 如果a包含可選值碴开,把值賦給b毅该,條件成立。如果a不包含可選值潦牛,則條件失敗
if let b = a {
    print("b value is \(b)")
}else {
    print("不能訪(fǎng)問(wèn)b")
}

隱式解析可選類(lèi)型

可選類(lèi)型暗示了常量或者變量可以"沒(méi)有值"眶掌。可選可以通過(guò)if來(lái)判斷是否有值罢绽,如果有值可以使用可選綁定來(lái)解析值畏线。

var a : Int?
if a == nil {
  print("a 沒(méi)有值")
}
a = 12
if let c = a {
    print("c=\(c)")
}
let possibleString: String? = "An optional String"
let forcedString: String = possibleString! //需要使用良价!

// 注意這里寝殴,不是問(wèn)號(hào)而是感嘆號(hào),這就是隱式解析可選類(lèi)型明垢,取值的時(shí)候不用加蚣常!
let assumedString: String! = "An implicatly unwrapped optinal string"
let implicitString: String = assumedString

一個(gè)隱式解析可選類(lèi)型其實(shí)就是一個(gè)普通的可選類(lèi)型。但可以當(dāng)做非可選類(lèi)型來(lái)使用痊银。并不需要每次都是用抵蚊!號(hào)來(lái)獲取值。
如果隱式解析可選類(lèi)型沒(méi)有值的時(shí)候嘗試讀取值會(huì)觸發(fā)運(yùn)行時(shí)錯(cuò)誤溯革。

錯(cuò)誤處理

fun canTrowAnError() throws {
    //這個(gè)函數(shù)有可能拋出錯(cuò)誤贞绳。
}

一個(gè)函數(shù)可以通過(guò)聲明中添加throws關(guān)鍵字來(lái)拋出錯(cuò)誤消息,當(dāng)你的函數(shù)能拋出錯(cuò)誤消息時(shí)致稀,你應(yīng)該在表達(dá)式中前置try關(guān)鍵字

do{
  try canTrowAnError()
}catch {
  // 有一個(gè)錯(cuò)誤消息拋出
}

一個(gè)do語(yǔ)句創(chuàng)建了一個(gè)新的包含作用域冈闭,使得錯(cuò)誤能被傳播到一個(gè)或者多個(gè)catch語(yǔ)句中。

func makeASandwich() throws{
    // ...
}
func eatASandwich() throws{
    // ...
}

do {
    try makeASandwich()
    eatASandwich()
}catch SandWichError.outOfCleanDishes {
        washDishes()
}catch SandWichError.missingIngredients(let ingredients){
    buyGroceries(ingredients)
}

斷言

如果在值缺失或者值并不滿(mǎn)足特定條件的情況下抖单,你的代碼可能無(wú)法繼續(xù)執(zhí)行萎攒,這時(shí)遇八,你可以在你的代碼中觸發(fā)一個(gè)斷言,來(lái)結(jié)束代碼運(yùn)行耍休,并通過(guò)調(diào)試來(lái)找到問(wèn)題的原因刃永。

func assert(_ condition: @autoclosure () -> Bool, _ message: @autoclosure () -> String = default, file: StaticString = #file, line: UInt = #line)
// condition 斷言條件
// message condition為false的時(shí)候觸發(fā)輸出message信息,默認(rèn)為空字符串
// file 如果斷言失敗羊精,則打印文件名斯够,默認(rèn)是該方法所處的文件。
// line 如果斷言失敗喧锦,則打印行號(hào)雳刺,默認(rèn)是該方法所處的行號(hào)。

當(dāng)代碼使用優(yōu)化編譯的時(shí)候裸违,斷言將會(huì)被禁用掖桦,Xcode的release模式下,斷言就會(huì)被禁用
何時(shí)使用斷言:
條件為假供汛,但需要條件為真的時(shí)候代碼才能繼續(xù)執(zhí)行枪汪。
斷言可能導(dǎo)致應(yīng)用終止,所以發(fā)布的時(shí)候一定要去掉斷言怔昨。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末雀久,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子趁舀,更是在濱河造成了極大的恐慌赖捌,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件矮烹,死亡現(xiàn)場(chǎng)離奇詭異越庇,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)奉狈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)卤唉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人仁期,你說(shuō)我怎么就攤上這事桑驱。” “怎么了跛蛋?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵熬的,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我赊级,道長(zhǎng)押框,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任此衅,我火速辦了婚禮强戴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘挡鞍。我一直安慰自己骑歹,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布墨微。 她就那樣靜靜地躺著道媚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪翘县。 梳的紋絲不亂的頭發(fā)上最域,一...
    開(kāi)封第一講書(shū)人閱讀 51,274評(píng)論 1 300
  • 那天,我揣著相機(jī)與錄音锈麸,去河邊找鬼镀脂。 笑死,一個(gè)胖子當(dāng)著我的面吹牛忘伞,可吹牛的內(nèi)容都是我干的薄翅。 我是一名探鬼主播,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼氓奈,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼翘魄!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起舀奶,我...
    開(kāi)封第一講書(shū)人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤暑竟,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后育勺,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體但荤,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年涧至,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了纱兑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡化借,死狀恐怖潜慎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蓖康,我是刑警寧澤铐炫,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站蒜焊,受9級(jí)特大地震影響倒信,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜泳梆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一鳖悠、第九天 我趴在偏房一處隱蔽的房頂上張望榜掌。 院中可真熱鬧,春花似錦乘综、人聲如沸憎账。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)胞皱。三九已至,卻和暖如春九妈,著一層夾襖步出監(jiān)牢的瞬間反砌,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工萌朱, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留宴树,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓晶疼,卻偏偏與公主長(zhǎng)得像森渐,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子冒晰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 常量和變量 常量和變量把一個(gè)名字(比如maximumNumberOfLoginAttempts或者welcomeM...
    窮人家的孩紙閱讀 2,411評(píng)論 0 3
  • [The Swift Programming Language 中文版] Swift 是一門(mén)開(kāi)發(fā) iOS, OS ...
    風(fēng)林山火閱讀 329評(píng)論 0 0
  • Swift 是一門(mén)開(kāi)發(fā) iOS, OS X 和 watchOS 應(yīng)用的新語(yǔ)言同衣。然而,如果你有 C 或者 Objec...
    iOS開(kāi)發(fā)攻城獅閱讀 454評(píng)論 0 1
  • 聽(tīng)壶运、記耐齐、做 看上去是相關(guān)聯(lián)的三個(gè)動(dòng)詞 但我覺(jué)得卻是獨(dú)立的 從出生開(kāi)始我們就開(kāi)始聽(tīng) 聽(tīng)各種聲音 父母的教誨 老師教的...
    冰鎮(zhèn)火藥閱讀 276評(píng)論 1 2
  • 文/天水 細(xì)雨淋石路,青煙籠碧灣蒋情。 平湖無(wú)日月埠况,落艷嘆悲歡。 緒斷天陰處棵癣,愁生水霧間辕翰。 蒼茫一大地,寂靜半城山狈谊。
    天水居士閱讀 276評(píng)論 13 12