Language Guide --- The Basics

在swift中的optional類型就像在OC中使用nil一樣若厚,但是它可以用于任何類型拦英,而不僅僅是類。
swift是一種類型安全的語言测秸,它甚至能夠阻止你把一個optional string類型的變量傳給一個需要string類型的代碼塊疤估。

Constants and Variables

Declaring Constants and Variables

你可以在一行聲明多個常量或變量,使用逗號分隔霎冯。

var x = 0.0, y = 0.0, z = 0.0

Type Annotations

在變量或常量后加一個冒號铃拇,然后跟著一個空格,空格之后是需要使用的類型沈撞。

var welcomeMessage: String

可以在一行聲明多個同類型的變量(??本文中的“變量” 指的是變量和常量兩種慷荔,下同。注意根據(jù)語境區(qū)分缠俺。)显晶,只在最后做類型聲明。

var red, green, blue: Double

如果聲明變量時沒有賦初值壹士,必須做類型聲明磷雇。

Naming Constants and Variables

變量的名字幾乎可以包含任意字符。不能以數(shù)字開頭躏救。一旦使用一個名字聲明了變量唯笙,就不能再使用了。也不能做常量變量之間的轉(zhuǎn)換盒使。

Printing Constants and Variables

print()
沒有什么好說的崩掘。

Comments

單行注釋 //
多行注釋 /* */
與c語言不同的是,多行注釋可以嵌套在多行注釋中少办。

Semicolons

swift不需要在每行語句結(jié)束后加分好苞慢,你要是愿意寫頁沒人管你。
但是凡泣,如果一行有多條語句枉疼,那就要加分號分隔了。

Integers

跟C語言類似鞋拟,有8位骂维、16位、32位贺纲、64位的有符號和無符號整型航闺。例如 UInt8 、Int32。

Integer Bounds

使用 min 和 max 屬性獲得某個類型整型的最值潦刃。

let minValue = UInt8.min  // minValue is equal to 0, and is of type UInt8
let maxValue = UInt8.max  // maxValue is equal to 255, and is of type UInt8

Int

絕大多數(shù)情況下侮措,你不需要去指定整型的大小。swift提供了一個Int類型乖杠,這個類型跟平臺有關(guān)分扎。
當然還有一個 UInt 類型。

Floating-Point Numbers

Double : 64 位胧洒, 至少15位小數(shù)
Float : 32位畏吓, 6位小數(shù)。

Type Safety and Type Inference

swift是一種類型安全的語言卫漫,它不意味著你聲明變量的時候必須指定它的類型菲饼,因為編譯器會推斷出變量的類型。即使編譯器可以為我們做一些類型判斷的工作列赎,但是變量是可變類型還是不可變的還是需要開發(fā)者指定的宏悦。

Numeric Literals

為了增強可讀性,整型和浮點型的變量可以在前面加0包吝、在數(shù)字間加下劃線饼煞。

let paddedDouble = 000123.456
let oneMillion = 1_000_000
let justOverOneMillion = 1_000_000.000_000_1

Numeric Type Conversion

通常使用整型就使用Int,即使這些數(shù)都是正數(shù)漏策。這樣的好處之一是派哲,它能與編譯器推斷的類型匹配臼氨。而且指定整型的位數(shù)掺喻,會帶來額外的開銷。

Integer Conversion

let twoThousand: UInt16 = 2_000
let one: UInt8 = 1
let twoThousandAndOne = twoThousand + UInt16(one)

UInt16不能與UInt8相加储矩。

Integer and Floating-Point Conversion

let three = 3
let pointOneFourOneFiveNine = 0.14159
let pi = Double(three) + pointOneFourOneFiveNine

let integerPi = Int(pi)

浮點型轉(zhuǎn)整型感耙,采用去尾法。

Type Aliases

為已經(jīng)存在的類型聲明一個別名持隧,使用typealias關(guān)鍵字即硼。

typealias AudioSample = UInt16

Booleans

swift的布爾類型是Bool,它有兩種常量值:true 和 false。

Tuples

元組內(nèi)的變量類型可以不相同屡拨。

let http404Error = (404, "Not Found")

可以把元組的內(nèi)容分解成多個變量或常量只酥。

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

如果你只需要元組的部分內(nèi)容,把不關(guān)心的部分使用_代替呀狼。

let (justTheStatusCode, _) = http404Error

也可以使用index取得元組的某個內(nèi)容裂允。index start from 0。

print("The status message is \(http404Error.1)")
// Prints "The status message is Not Found"

當定義元組的時候哥艇,可以給元素命名绝编。然后就可以通過命名取值了。

let http200Status = (statusCode: 200, description: "OK")
print("The status code is \(http200Status.statusCode)")

元組作函數(shù)的返回值特別好用。為了臨時返回不同類型的值十饥,不用組織一個復(fù)雜的數(shù)據(jù)結(jié)構(gòu)窟勃。

Optionals

當可能沒有值的時候需要使用optional。

let possibleNumber = "123a"
let convertedNumber = Int(possibleNumber)
// convertedNumber is inferred to be of type "Int?", or "optional Int"

nil

不能給一個非optioanl類型的變量賦值nil逗堵。
沒有給optional類型的變量賦初值的時候秉氧,會被自動設(shè)置成nil。

If Statements and Forced Unwrapping

如果你已經(jīng)知道了optional類型的變量有值蜒秤,可以在變量后加上!來取它的值谬运。

if convertedNumber != nil {
    print("convertedNumber has an integer value of \(convertedNumber!).")
}

Optional Binding

在 if 和 while 中可以檢查optional變量是否有值,如果有值臨時賦值給一個常量或變量垦藏。

if let actualNumber = Int(possibleNumber) {
    print("\"\(possibleNumber)\" has an integer value of \(actualNumber)")
} else {
    print("\"\(possibleNumber)\" could not be converted to an integer")
}

可以在 if 中判斷多個條件梆暖,使用逗號分隔。只要一個為nil 或 false掂骏,整體就為false轰驳。

if let firstNumber = Int("4"), let secondNumber = Int("42"), firstNumber < secondNumber && secondNumber < 100 {
    print("\(firstNumber) < \(secondNumber) < 100")
}

Implicitly Unwrapped Optionals

如果能確定一個optional 的變量在某次賦值之后就不會變nil了,可以用隱式解析可選類型代替(String5茏啤)级解。

let possibleString: String? = "An optional string."
let forcedString: String = possibleString! // requires an exclamation mark

let assumedString: String! = "An implicitly unwrapped optional string."
let implicitString: String = assumedString // no need for an exclamation mark

隱式解析可選類型也是可選類型,也可以做 if let田绑。它跟可選類型的區(qū)別是勤哗,每次使用不需要判斷了。提高了效率掩驱。

如果一個 String芒划!類型變量的值是nil,你去取它的值欧穴,會得到一個運行時的錯誤民逼。

Assertions and Preconditions

斷言和前提條件會在運行時檢查,確保某些代碼在滿足條件執(zhí)行涮帘。如果判斷結(jié)果為true拼苍,代碼能繼續(xù)執(zhí)行;如果為false调缨,程序被中斷疮鲫。

斷言只在debug模式下有效。
前提條件在debug和build模式下都只執(zhí)行弦叶。

Debugging with Assertions

當斷言的條件為false時俊犯,可以輸出一條語句。

let age = -3
assert(age >= 0, "A person's age can't be less than zero.")

也可以省略輸出語句

assert(age >= 0)

可以使用assertionFailure函數(shù)表明湾蔓,斷言已經(jīng)失敗了瘫析。

if age > 10 {
    print("You can ride the roller-coaster or the ferris wheel.")
} else if age > 0 {
    print("You can ride the ferris wheel.")
} else {
    assertionFailure("A person's age can't be less than zero.")
}

Enforcing Preconditions

例如,使用前提條件檢查下表是否越界、函數(shù)的參數(shù)是否有效贬循。

precondition(index > 0, "Index must be greater than zero.")

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末咸包,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子杖虾,更是在濱河造成了極大的恐慌烂瘫,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奇适,死亡現(xiàn)場離奇詭異坟比,居然都是意外死亡,警方通過查閱死者的電腦和手機嚷往,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門葛账,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人皮仁,你說我怎么就攤上這事籍琳。” “怎么了贷祈?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵趋急,是天一觀的道長。 經(jīng)常有香客問我势誊,道長呜达,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任粟耻,我火速辦了婚禮查近,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘勋颖。我一直安慰自己嗦嗡,他們只是感情好,可當我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布饭玲。 她就那樣靜靜地躺著,像睡著了一般叁执。 火紅的嫁衣襯著肌膚如雪茄厘。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天谈宛,我揣著相機與錄音次哈,去河邊找鬼。 笑死吆录,一個胖子當著我的面吹牛窑滞,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼哀卫,長吁一口氣:“原來是場噩夢啊……” “哼巨坊!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起此改,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤趾撵,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后共啃,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體占调,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年移剪,在試婚紗的時候發(fā)現(xiàn)自己被綠了究珊。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡纵苛,死狀恐怖苦银,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情赶站,我是刑警寧澤幔虏,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站贝椿,受9級特大地震影響想括,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜烙博,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一瑟蜈、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧渣窜,春花似錦铺根、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至详瑞,卻和暖如春掂林,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背坝橡。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工泻帮, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人计寇。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓锣杂,卻偏偏與公主長得像脂倦,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子元莫,可洞房花燭夜當晚...
    茶點故事閱讀 44,969評論 2 355

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