iOS開發(fā)之Swift學(xué)習(xí)(三)——基礎(chǔ)部分

文章目錄:
(1)常量和變量
(2)注釋
(3)數(shù)值型類型轉(zhuǎn)換
(4)類型別名
(5)布爾值
(6)元組
(7)可選類型
(8)斷言

  1. Swift 包含了 C 和 Objective-C 上所有基礎(chǔ)數(shù)據(jù)類型淡诗,Int 表示整型值; Double和Float表示浮點(diǎn)型值; Bool是布爾型值; String是文本型數(shù)據(jù)。 Swift 還提供了三個(gè)基本的集合型,Array挖藏,Set和Dictionary堰塌。
  2. Swift 還增加了 Objective-C 中沒有的高階數(shù)據(jù)類型比如元組(Tuple)掰邢。元組可以讓你 創(chuàng)建或者傳遞一組數(shù)據(jù)劈猪,比如作為函數(shù)的返回值時(shí)途戒,你可以用一個(gè)元組可以返回多個(gè)值。
  3. Swift 還增加了可選(Optional)類型件豌,用于處理值缺失的情況疮方。可選表示 “那兒有一個(gè)值茧彤,并且它等于 x ” 或者 “那兒沒有值” 骡显。可選有點(diǎn)像在 Objective-C 中使用 nil 曾掂,但是它可以用在任何類型上惫谤,不僅僅是 類≈橄矗可選類型比 Objective-C 中的 nil 指針更加安全也更具表現(xiàn)力溜歪,它是 Swift 許多強(qiáng)大特性的重要組成部分。

(1)常量和變量

1. 聲明常量和變量

let maximumNumberOfLoginAttempts = 10
var currentLoginAttempt = 0

2. 類型標(biāo)注

聲明常量或者變量的時(shí)候可以加上類型標(biāo)注(type annotation)许蓖,說明常量或者變量中要存儲(chǔ)的值的類 型蝴猪。如果要添加類型標(biāo)注,需要在常量或者變量名后面加上一個(gè)冒號(hào)和空格膊爪,然后加上類型名稱拯腮。

var welcomeMessage: String

可以在一行中定義多個(gè)同樣類型的變量,用逗號(hào)分割蚁飒,并在最后一個(gè)變量名之后添加類型標(biāo)注:

var red, green, blue: Double

注意: 一般來說很少需要寫類型標(biāo)注动壤。如果你在聲明常量或者變量的時(shí)候賦了一個(gè)初始值,Swift可以推斷出這個(gè)常量或者變量的類型淮逻。在上面的例子中琼懊,沒有給 welcomeMessage 賦初始值,所以變量welcomeMessage的類型是通過一個(gè)類型標(biāo)注指定的爬早,而不是通過初始值推斷的哼丈。

3. 常量和變量的命名

可以用任何字符作為常量和變量名,包括 Unicode 字符:

let π = 3.14159
let 你好 = "你好世界" let ?? = "dogcow"

4. 輸出常量和變量

用 print(_:separator:terminator:) 函數(shù)來輸出當(dāng)前常量或變量的值:

(2)注釋

多行注釋可以嵌套

(3)數(shù)值型類型轉(zhuǎn)換

整數(shù)和浮點(diǎn)數(shù)轉(zhuǎn)換:

整數(shù)和浮點(diǎn)數(shù)的轉(zhuǎn)換必須顯式指定類型:

let three = 3
let pointOneFourOneFiveNine = 0.14159
let pi = Double(three) + pointOneFourOneFiveNine // pi 等于 3.14159筛严,所以被推測(cè)為 Double 類型

常量 three 的值被用來創(chuàng)建一個(gè) Double 類型的值醉旦,所以加號(hào)兩邊的數(shù)類型須相同。如果不進(jìn)行 轉(zhuǎn)換桨啃,兩者無法相加车胡。

浮點(diǎn)數(shù)到整數(shù)的反向轉(zhuǎn)換:(用 Double 或者 Float 類型來初始化:)
let integerPi = Int(pi)
// integerPi 等于 3,所以被推測(cè)為 Int 類型
當(dāng)用這種方式來初始化一個(gè)新的整數(shù)值時(shí)照瘾,浮點(diǎn)值會(huì)被截?cái)嘈偌R簿褪钦f 4.75 會(huì)變成 4 , -3.9 會(huì)變成 -3 析命。

(4)類型別名

類型別名(type aliases)就是給現(xiàn)有類型定義另一個(gè)名字主卫√幽可以使用 typealias 關(guān)鍵字來定義類型別名。當(dāng)想要給現(xiàn)有類型起一個(gè)更有意義的名字時(shí)簇搅,類型別名非常有用完域。

typealias AudioSample = UInt16
var maxAmplitudeFound = AudioSample.min // maxAmplitudeFound 現(xiàn)在是 0

(5)布爾值

Swift 有一個(gè)基本的布爾(Boolean)類型,叫做 Bool 瘩将。布爾值指邏輯上的值筒主,因?yàn)樗鼈冎荒苁钦婊蛘呒佟wift 有兩個(gè)布爾常量鸟蟹,true 和 false:

let orangesAreOrange = true
let turnipsAreDelicious = false

寫條件語(yǔ)句比如 語(yǔ)句的時(shí)候乌妙,布爾值非常有用:

if turnipsAreDelicious {
     print("Mmm, tasty turnips!")
 } else {
     print("Eww, turnips are horrible.")
}
// 輸出 "Eww, turnips are horrible."

(6)元組

  1. 元組(tuples)把多個(gè)值組合成一個(gè)復(fù)合值。元組內(nèi)的值可以是任意類型建钥,并不要求是相同類型藤韵。
let http404Error = (404, "Not Found")
// http404Error 的類型是 (Int, String),值是 (404, "Not Found")
  1. 將一個(gè)元組的內(nèi)容分解(decompose)成單獨(dú)的常量和變量熊经,然后就可以正常使用它們了:
let (statusCode, statusMessage) = http404Error 
print("The status code is \(statusCode)")
// 輸出 "The status code is 404"
print("The status message is \(statusMessage)") 
// 輸出 "The status message is Not Found"
  1. 如果只需要一部分元組值泽艘,分解的時(shí)候可以把要忽略的部分用下劃線( _ )標(biāo)記:
let (justTheStatusCode, _) = http404Error 
print("The status code is \(justTheStatusCode)") 
// 輸出 "The status code is 404"
  1. 可以通過下標(biāo)來訪問元組中的單個(gè)元素,下標(biāo)從零開始:
print("The status code is \(http404Error.0)")
// 輸出 "The status code is 404"
print("The status message is \(http404Error.1)") 
// 輸出 "The status message is Not Found"
  1. 可以在定義元組的時(shí)候給單個(gè)元素命名:
let http200Status = (statusCode: 200, description: "OK")

給元組中的元素命名后镐依,可以通過名字來獲取這些元素的值:

print("The status code is \(http200Status.statusCode)")
// 輸出 "The status code is 200"
print("The status message is \(http200Status.description)") 
// 輸出 "The status message is OK"

作為函數(shù)返回值時(shí)匹涮,元組非常有用。一個(gè)用來獲取網(wǎng)頁(yè)的函數(shù)可能會(huì)返回一個(gè) (Int, String) 元組來描述是否獲取成功槐壳。和只能返回一個(gè)類型的值比較起來然低,一個(gè)包含兩個(gè)不同類型值的元組可以讓函數(shù)的返回信息更有用。

(7)可選類型

1.使用可選類型(optionals)來處理值可能缺失的情況务唐■ㄈ粒可選類型表示:
? 有值,等于 x
或者
? 沒有值

Swift 的 Int 類型有一種構(gòu)造器枫笛,作用是將一個(gè) String 值轉(zhuǎn)換成一個(gè) Int 值吨灭。然而,并 不是所有的字符串都可以轉(zhuǎn)換成一個(gè)整數(shù)刑巧。字符串 "123" 可以被轉(zhuǎn)換成數(shù)字 123 喧兄,但是字符串 "hello, wor ld" 不行。

使用這種構(gòu)造器來嘗試將一個(gè) String 轉(zhuǎn)換成 Int :

let possibleNumber = "123"
let convertedNumber = Int(possibleNumber)
// convertedNumber 被推測(cè)為類型 "Int?"啊楚, 或者類型 "optional Int"

因?yàn)樵摌?gòu)造器可能會(huì)失敗吠冤,所以它返回一個(gè)可選類型(optional) Int ,而不是一個(gè) Int 特幔。一個(gè)可選的 Int 被寫作 Int? 而不是 Int 咨演。問號(hào)暗示包含的值是可選類型,也就是說可能包含 Int 值也可能不包含值蚯斯。(不 能包含其他任何值比如 Bool 值或者 String 值薄风。只能是 Int 或者什么都沒有。)

2.nil
可以給可選變量賦值為 nil 來表示它沒有值:

var serverResponseCode: Int? = 404
// serverResponseCode 包含一個(gè)可選的 Int 值 404 
serverResponseCode = nil
// serverResponseCode 現(xiàn)在不包含值

注意:
nil 不能用于非可選的常量和變量拍嵌。如果你的代碼中有常量或者變量需要處理值缺失的情況遭赂,請(qǐng)把它們聲明成對(duì)應(yīng)的可選類型。

如果聲明一個(gè)可選常量或者變量但是沒有賦值横辆,它們會(huì)自動(dòng)被設(shè)置為 nil :

var surveyAnswer: String?
// surveyAnswer 被自動(dòng)設(shè)置為 nil

注意:
Swift 的 nil 和 Objective-C 中的 nil 并不一樣撇他。在 Objective-C 中, nil 是一個(gè)指向不存在對(duì)象的指針狈蚤。在 Swift 中困肩, nil 不是指針——它是一個(gè)確定的值,用來表示值缺失脆侮。任何類型的可選狀態(tài)都可以被設(shè)置為 nil 锌畸,不只是對(duì)象類型。

3.if 語(yǔ)句以及強(qiáng)制解析
可以使用 if 語(yǔ)句和 nil 比較來判斷一個(gè)可選值是否包含值靖避。使用“相等”(==)或“不等”( != )來執(zhí)行比較潭枣。
如果可選類型有值,它將不等于 nil :

if convertedNumber != nil {
     print("convertedNumber contains some integer value.")
}
// 輸出 "convertedNumber contains some integer value."

當(dāng)確定可選類型確實(shí)包含值之后幻捏,可以在可選的名字后面加一個(gè)感嘆號(hào)( ! )來獲取值盆犁。這個(gè)驚嘆號(hào)表示“我知道這個(gè)可選有值,請(qǐng)使用它篡九⌒乘辏”這被稱為可選值的強(qiáng)制解析(forced unwrapping):(也就是通常說的解包)

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

注意:
使用 ! 來獲取一個(gè)不存在的可選值會(huì)導(dǎo)致運(yùn)行時(shí)錯(cuò)誤。使用 ! 來強(qiáng)制解析值之前榛臼,一定要確定可選包含一 個(gè)非 nil 的值翰铡。

4.可選綁定
使用可選綁定(optional binding)來判斷可選類型是否包含值,如果包含就把值賦給一個(gè)臨時(shí)常量或者變 量讽坏《В可選綁定可以用在 if 和 while 語(yǔ)句中,這條語(yǔ)句不僅可以用來判斷可選類型中是否有值路呜,同時(shí)可以將可選類型中的值賦給一個(gè)常量或者變量迷捧。

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

這段代碼可以被理解為:(講的太清楚明了了)
“如果 Int(possibleNumber) 返回的可選 Int 包含一個(gè)值,創(chuàng)建一個(gè)叫做 actualNumber 的新常量并將可選 包含的值賦給它胀葱∧铮”
如果轉(zhuǎn)換成功, actualNumber 常量可以在 if 語(yǔ)句的第一個(gè)分支中使用抵屿。它已經(jīng)被可選類型 包含的 值初始化 過庆锦,所以不需要再使用 ! 后綴來獲取它的值。在這個(gè)例子中轧葛,actualNumber 只被用來輸出轉(zhuǎn)換結(jié)果搂抒。
你可以在可選綁定中使用常量和變量艇搀。如果你想在if語(yǔ)句的第一個(gè)分支中操作 actualNumber 的值,你可以改 成 if var actualNumber 求晶,這樣可選類型包含的值就會(huì)被賦給一個(gè)變量而非常量焰雕。
你可以包含多個(gè)可選綁定或多個(gè)布爾條件在一個(gè) if 語(yǔ)句中,只要使用逗號(hào)分開就行芳杏。只要有任意一個(gè)可選綁定 的值為nil矩屁,或者任意一個(gè)布爾條件為false,則整個(gè)if條件判斷為false爵赵,這時(shí)你就需要使用嵌套 if 條 件語(yǔ)句來處理吝秕,如下所示:

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

注意: 在 if 條件語(yǔ)句中使用常量和變量來創(chuàng)建一個(gè)可選綁定,僅在 if 語(yǔ)句的句中( body )中才能獲取到 值空幻。相反烁峭,在 guard 語(yǔ)句中使用常量和變量來創(chuàng)建一個(gè)可選綁定,僅在 guard 語(yǔ)句外且在語(yǔ)句后才能獲取 到值

5.隱式解析可選類型
(1)可選類型暗示了常量或者變量可以“沒有值”氛悬≡蛱辏可選可以通過 if 語(yǔ)句來判斷是否有值,如果有值的話可以通過可選綁定來解析值如捅。
(2)有時(shí)候在程序架構(gòu)中棍现,第一次被賦值之后,可以確定一個(gè)可選類型總會(huì)有值镜遣。在這種情況下己肮,每次都要判斷和解析可選值是非常低效的,因?yàn)榭梢源_定它總會(huì)有值悲关。
這種類型的可選狀態(tài)被定義為隱式解析可選類型(implicitly unwrapped optionals)谎僻。把想要用作可選的類型的后面的問號(hào)( String? )改成感嘆號(hào)( String! )來聲明一個(gè)隱式解析可選類型。
(3)當(dāng)可選類型被第一次賦值之后就可以確定之后一直有值的時(shí)候寓辱,隱式解析可選類型非常有用艘绍。隱式解析可選類型 主要被用在 Swift 中類的構(gòu)造過程中
(4)一個(gè)隱式解析可選類型其實(shí)就是一個(gè)普通的可選類型,但是可以被當(dāng)做非可選類型來使用秫筏,并不需要每次都使用 解析來獲取可選值诱鞠。下面的例子展示了可選類型 String 和隱式解析可選類型 String 之間的區(qū)別:

let possibleString: String? = "An optional string."
let forcedString: String = possibleString! // 需要感嘆號(hào)來獲取值
let assumedString: String! = "An implicitly unwrapped optional string." let implicitString: String = assumedString // 不需要感嘆號(hào)
可以把隱式解析可選類型當(dāng)做一個(gè)可以自動(dòng)解析的可選類型。要做的只是聲明的時(shí)候把感嘆號(hào)放到類型的結(jié)尾这敬,而不是每次取值的可選名字的結(jié)尾航夺。

注意:
 如果你在隱式解析可選類型沒有值的時(shí)候嘗試取值,會(huì)觸發(fā)運(yùn)行時(shí)錯(cuò)誤崔涂。和你在沒有值的普通可選類型后面加一個(gè)驚嘆號(hào)一樣阳掐。

(5)仍然可以把隱式解析可選類型當(dāng)做普通可選類型來判斷它是否包含值:

if assumedString != nil {
     print(assumedString)
}
// 輸出 "An implicitly unwrapped optional string."

也可以在可選綁定中使用隱式解析可選類型來檢查并解析它的值:

if let definiteString = assumedString {
     print(definiteString)
}
// 輸出 "An implicitly unwrapped optional string."

注意:
如果一個(gè)變量之后可能變成 nil 的話請(qǐng)不要使用隱式解析可選類型。如果你需要在變量的生命周期中判斷是否 是 nil 的話,請(qǐng)使用普通可選類型缭保。

(8)斷言

可選類型可以讓你判斷值是否存在汛闸,你可以在代碼中優(yōu) 地處理值缺失的情況。然而涮俄,在某些情況下蛉拙,如果值缺 失或者值并不滿足特定的條件尸闸,你的代碼可能沒辦法繼續(xù)執(zhí)行彻亲。這時(shí),你可以在你的代碼中觸發(fā)一個(gè) 斷言(assertion) 來結(jié)束代碼運(yùn)行并通過調(diào)試來找到值缺失的原因吮廉。

  1. 使用斷言進(jìn)行調(diào)試
    斷言會(huì)在運(yùn)行時(shí)判斷一個(gè)邏輯條件是否為 true 苞尝。從字面意思來說,斷言“斷言”一個(gè)條件是否為真宦芦≈嬷罚可以使用斷言來保證在運(yùn)行其他代碼之前,某些重要的條件已經(jīng)被滿足调卑。如果條件判斷為 true 抡砂,代碼運(yùn)行會(huì)繼續(xù)進(jìn)行;如果條件判斷為 false ,代碼執(zhí)行結(jié)束恬涧,應(yīng)用被終止注益。
    如果代碼在調(diào)試環(huán)境下觸發(fā)了一個(gè)斷言,比如你在 Xcode 中構(gòu)建并運(yùn)行一個(gè)應(yīng)用溯捆,可以清楚地看到不合法的狀態(tài)發(fā)生在哪里并檢查斷言被觸發(fā)時(shí)應(yīng)用的狀態(tài)丑搔。此外,斷言允許附加一條調(diào)試信息提揍。
    可以使用全局 assert(::file:line:) 函數(shù)來寫一個(gè)斷言啤月。向這個(gè)函數(shù)傳入一個(gè)結(jié)果為 true 或者 false 的表達(dá)式以及一條信息,當(dāng)表達(dá)式的結(jié)果為 false 的時(shí)候這條信息會(huì)被顯示:
let age = -3
assert(age >= 0, "A person's age cannot be less than zero") 
// 因?yàn)?age < 0劳跃,所以斷言會(huì)觸發(fā)

在這個(gè)例子中谎仲,只有 age >= 0 為 true 的時(shí)候,即 age 的值非負(fù)的時(shí)候刨仑,代碼才會(huì)繼續(xù)執(zhí)行郑诺。如果 age 的值是負(fù)數(shù),就像代碼中那樣贸人, age >= 0 為 false 间景,斷言被觸發(fā),終止應(yīng)用艺智。
如果不需要斷言信息倘要,可以省略,就像這樣:

assert(age >= 0)
注意:
當(dāng)代碼使用優(yōu)化編譯的時(shí)候,斷言將會(huì)被禁用封拧,例如在 Xcode 中志鹃,使用默認(rèn)的 target Release 配置選項(xiàng)來 build 時(shí),斷言會(huì)被禁用泽西。
  1. 何時(shí)使用斷言
    當(dāng)條件可能為假時(shí)使用斷言曹铃,但是最終一定要保證條件為真,這樣代碼才能繼續(xù)運(yùn)行捧杉。斷言的適用情景:
    ? 整數(shù)類型的下標(biāo)索引被傳入一個(gè)自定義下標(biāo)實(shí)現(xiàn)陕见,但是下標(biāo)索引值可能太小或者太大。
    ? 需要給函數(shù)傳入一個(gè)值味抖,但是非法的值可能導(dǎo)致函數(shù)不能正常執(zhí)行评甜。
    ? 一個(gè)可選值現(xiàn)在是 nil ,但是后面的代碼運(yùn)行需要一個(gè)非 nil 值仔涩。
    注意:
    斷言可能導(dǎo)致你的應(yīng)用終止運(yùn)行忍坷,所以你應(yīng)當(dāng)仔細(xì)設(shè)計(jì)你的代碼來讓非法條件不會(huì)出現(xiàn)。然而熔脂,在應(yīng)用發(fā)布之前佩研,有時(shí)候非法條件可能出現(xiàn),這時(shí)使用斷言可以快速發(fā)現(xiàn)問題霞揉。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末旬薯,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子零聚,更是在濱河造成了極大的恐慌袍暴,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件隶症,死亡現(xiàn)場(chǎng)離奇詭異政模,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蚂会,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門淋样,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人胁住,你說我怎么就攤上這事趁猴。” “怎么了彪见?”我有些...
    開封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵儡司,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我余指,道長(zhǎng)捕犬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮碉碉,結(jié)果婚禮上柴钻,老公的妹妹穿的比我還像新娘。我一直安慰自己垢粮,他們只是感情好贴届,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蜡吧,像睡著了一般毫蚓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上斩跌,一...
    開封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天绍些,我揣著相機(jī)與錄音捞慌,去河邊找鬼耀鸦。 笑死,一個(gè)胖子當(dāng)著我的面吹牛啸澡,可吹牛的內(nèi)容都是我干的袖订。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼嗅虏,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼洛姑!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起皮服,我...
    開封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤楞艾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后龄广,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體硫眯,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年择同,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了两入。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡敲才,死狀恐怖裹纳,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情紧武,我是刑警寧澤剃氧,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站阻星,受9級(jí)特大地震影響朋鞍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一番舆、第九天 我趴在偏房一處隱蔽的房頂上張望酝碳。 院中可真熱鬧,春花似錦恨狈、人聲如沸疏哗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)返奉。三九已至,卻和暖如春吗氏,著一層夾襖步出監(jiān)牢的瞬間芽偏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工弦讽, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留污尉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓往产,卻偏偏與公主長(zhǎng)得像被碗,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子仿村,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

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