swift-學(xué)習(xí)1

swift的簡(jiǎn)介

Swift 是一種新的編程語言嚎莉,用于編寫 iOS募书,MacOS叉讥, watchOS 和tvOS 的應(yīng)用程序是鬼。Swift 結(jié)合了 C 和 Object ive-C 的優(yōu)點(diǎn)并且不受 C 兼容性的限制。Swift 采用安全的編程模式并添加了很多新特性纲刀,這將使編程更簡(jiǎn) 單项炼,更靈活,也更有趣示绊。Swift 是基于成熟而且倍受喜愛的 Cocoa 和 Cocoa Touch 框架芥挣,它的降臨將重新定義 軟件開發(fā)。
Swift 的開發(fā)從很久之前就開始了耻台。為了給 Swift 打好基礎(chǔ)空免,蘋果公司改進(jìn)了編譯器,調(diào)試器和框架結(jié)構(gòu)盆耽。我們 使用自動(dòng)引用計(jì)數(shù)(Automatic Reference Counting, ARC)來簡(jiǎn)化內(nèi)存管理蹋砚。我們?cè)?Foundation 和 Cocoa 的 基礎(chǔ)上構(gòu)建框架棧使其完全現(xiàn)代化和標(biāo)準(zhǔn)化扼菠。 Objective-C 本身支持塊、集合語法和模塊坝咐,所以框架可以輕松支 持現(xiàn)代編程語言技術(shù)循榆。正是得益于這些基礎(chǔ)工作,我們現(xiàn)在才能發(fā)布這樣一個(gè)用于未來蘋果軟件開發(fā)的新語言墨坚。
Objective-C 開發(fā)者對(duì) Swift 并不會(huì)感到陌生秧饮。它采用了 Objective-C 的命名參數(shù)以及動(dòng)態(tài)對(duì)象模型,可以無 縫對(duì)接到現(xiàn)有的 Cocoa 框架泽篮,并且可以兼容 Objective-C 代碼盗尸。在此基礎(chǔ)之上,Swift 還有許多新特性并且支 持過程式編程和面向?qū)ο缶幊獭?br> Swift 對(duì)于初學(xué)者來說也很友好帽撑。它是第一個(gè)既滿足工業(yè)標(biāo)準(zhǔn)又像腳本語言一樣充滿表現(xiàn)力和趣味的系統(tǒng)編程語 言泼各。它支持代碼預(yù)覽(playgrounds),這個(gè)革命性的特性可以允許程序員在不編譯和運(yùn)行應(yīng)用程序的前提下運(yùn)行 S wift 代碼并實(shí)時(shí)查看結(jié)果亏拉。
Swift 將現(xiàn)代編程語言的精華和蘋果工程師文化的智慧結(jié)合了起來扣蜻。編譯器對(duì)性能進(jìn)行了優(yōu)化,編程語言對(duì)開發(fā) 進(jìn)行了優(yōu)化及塘,兩者互不干擾莽使,魚與熊掌兼得。Swift 既可以用于開發(fā) “hello, world” 這樣的小程序笙僚,也可以 用于開發(fā)一套完整的操作系統(tǒng)芳肌。所有的這些特性讓 Swift 對(duì)于開發(fā)者和蘋果來說都是一項(xiàng)值得的投資。
Swift 是編寫 iOS味咳,MacOS庇勃,watchOS 和 tvOS 應(yīng)用的極佳手段檬嘀,并將伴隨著新的特性和功能持續(xù)演進(jìn)槽驶。我們對(duì) S wift 充滿信心,你還在等什么!
直接進(jìn)入正題......

一.基礎(chǔ)部分

  • swift除了我們熟悉的類型鸳兽,還增加了oc沒有的高階數(shù)據(jù)類型比如 元祖掂铐。元祖可以讓你創(chuàng)建或者傳遞一組數(shù)據(jù),比如作為函數(shù)的返回值時(shí)揍异,你可以用一個(gè)元祖可以返回多個(gè)值
  • swift還增加了可選類型全陨,用于處理值缺失的情況,可選表示“那有一個(gè)值衷掷,并且它等于x”辱姨,或者“那沒有值”∑菪幔可選有點(diǎn)像oc中使用nil雨涛,但是他可以用在任何類型上枢舶,不僅僅是類,可選類型比oc中的nil指針更加安全也更具表現(xiàn)力替久,他是swift許多強(qiáng)大特性的重要組成部分凉泄。
  • swift是一門類型安全的語言,這意味著swift可以讓你清楚地知道值得類型蚯根,如果你的代碼期望得到一個(gè)string后众,類型安全會(huì)阻止你不小心傳入一個(gè)int。同樣的颅拦,如果你期望得到一個(gè)string 蒂誉,類型安全會(huì)阻止你意外傳入一個(gè)可選的string。類型安全可以幫助你在開發(fā)階段盡早發(fā)現(xiàn)并修正錯(cuò)誤矩距。
1. 常量和變量

常量和變量把一個(gè)名字(比如 maximumNumberOfLoginAttempts 或者 welcomeMessage )和一個(gè)指定類型的 值(比如數(shù)字 10 或者字符串 "Hello")關(guān)聯(lián)起來拗盒。常量的值一旦設(shè)定就不能改變,而變量的值可以隨意更改锥债。

聲明常量和變量

常量和變量必須在使用前聲明陡蝇,用 let 來聲明常量,用 var來聲明變量哮肚。下面的例子展示了如何用常量和變量來記錄用戶嘗試登錄的次數(shù):

let maximumNumberOfLoginAttempts = 10 
var currentLoginAttempt = 0```
你可以在一行中聲明多個(gè)常量或者多個(gè)變量登夫,用逗號(hào)隔開:
`var x = 0.0, y = 0.0, z = 0.0`
>注意:
如果你的代碼中有不需要改變的值,請(qǐng)使用 let 關(guān)鍵字將它聲明為常量允趟。只將需要改變的值聲明為變量恼策。

###### 類型標(biāo)注
當(dāng)你聲明常量或者變量的時(shí)候可以加上類型標(biāo)注(type annotation),說明常量或者變量中要存儲(chǔ)的值的類 型潮剪。如果要添加類型標(biāo)注涣楷,需要在`常量或者變量名`后面加上一個(gè)`冒號(hào)`和`空格`,然后加上`類型名稱`抗碰。

這個(gè)例子給 `welcomeMessage `變量添加了類型標(biāo)注狮斗,表示這個(gè)變量可以存儲(chǔ) String 類型的值:
`var welcomeMessage: String`
聲明中的冒號(hào)代表著“是...類型”,所以這行代碼可以被理解為:
“聲明一個(gè)類型為 `String` 弧蝇,名字為 `welcomeMessage` 的變量碳褒。”
“類型為 `String `”的意思是“可以存儲(chǔ)任意` String` 類型的值看疗∩尘”
`welcomeMessage` 變量現(xiàn)在可以被設(shè)置成任意字符串:
`welcomeMessage = "Hello"`
你可以在一行中定義多個(gè)同樣類型的變量,用逗號(hào)分割两芳,并在最后一個(gè)變量名之后添加類型標(biāo)注:
`var red, green, blue: Double`
>注意: 一般來說你很少需要寫類型標(biāo)注摔寨。如果你在聲明常量或者變量的時(shí)候賦了一個(gè)初始值,Swift可以推斷出這個(gè)常 量或者變量的類型怖辆,請(qǐng)參考類型安全和類型推斷 (頁 0)是复。在上面的例子中沉填,沒有給 welcomeMessage 賦初始 值,所以變量 welcomeMessage 的類型是通過一個(gè)類型標(biāo)注指定的佑笋,而不是通過初始值推斷的翼闹。

###### 常量和變量的命名
你可以用任何你喜歡的字符作為常量和變量名,包括 Unicode 字符:

let π = 3.14159
let 你好 = "你好世界"
let ?? = "dogcow"```
常量與變量名不能包含數(shù)學(xué)符號(hào)蒋纬,箭頭猎荠,保留的(或者非法的)Unicode 碼位,連線與制表符蜀备。也不能以數(shù)字開 頭关摇,但是可以在常量與變量名的其他地方包含數(shù)字。
一旦你將常量或者變量聲明為確定的類型碾阁,你就不能使用相同的名字再次進(jìn)行聲明输虱,或者改變其存儲(chǔ)的值的類
型。同時(shí)脂凶,你也不能將常量與變量進(jìn)行互轉(zhuǎn)宪睹。

注意: 如果你需要使用與Swift保留關(guān)鍵字相同的名稱作為常量或者變量名,你可以使用反引號(hào)(`)將關(guān)鍵字包圍的方 式將其作為名字使用蚕钦。無論如何亭病,你應(yīng)當(dāng)避免使用關(guān)鍵字作為常量或變量名,除非你別無選擇嘶居。

你可以更改現(xiàn)有的變量值為其他同類型的值罪帖,在下面的例子中, friendlyWelcome 的值從 "Hello!" 改為了 ur!" :

var friendlyWelcome = "Hello!" friendlyWelcome = "Bonjour!"
// friendlyWelcome 現(xiàn)在是 "Bonjour!"```
與變量不同邮屁,常量的值一旦被確定就不能更改了整袁。嘗試這樣做會(huì)導(dǎo)致編譯時(shí)報(bào)錯(cuò):

"Bonjo
let languageName = "Swift"
languageName = "Swift++"
// 這會(huì)報(bào)編譯時(shí)錯(cuò)誤 - languageName 不可改變```

輸出常量和變量

print(friendlyWelcome) // 輸出 "Bonjour!"
Swift 用字符串插值(string interpolation)的方式把常量名或者變量名當(dāng)做占位符加入到長(zhǎng)字符串中,Swift 會(huì)用當(dāng)前常量或變量的值替換這些占位符佑吝。將常量或變量名放入圓括號(hào)中坐昙,并在開括號(hào)前使用反斜杠將其轉(zhuǎn)義:

print("The current value of friendlyWelcome is \(friendlyWelcome)") // 輸出 "The current value of friendlyWelcome is Bonjour!```

###### 數(shù)值型字面量
整數(shù)字面量可以被寫作:
* 一個(gè)十進(jìn)制數(shù),沒有前綴
*一個(gè)二進(jìn)制數(shù)迹蛤,前綴是 `0b`
* 一個(gè)八進(jìn)制數(shù)民珍,前綴是 `0o`
* 一個(gè)十六進(jìn)制數(shù)襟士,前綴是 `0x`
下面的所有整數(shù)字面量的十進(jìn)制值都是 `17` :

let decimalInteger = 17
let binaryInteger = 0b10001 // 二進(jìn)制的17
let octalInteger = 0o21 // 八進(jìn)制的17
let hexadecimalInteger = 0x11 // 十六進(jìn)制的17```

類型別名

類型別名(type aliases)就是給現(xiàn)有類型定義另一個(gè)名字盗飒。你可以使用 typealias 關(guān)鍵字來定義類型別名。
當(dāng)你想要給現(xiàn)有類型起一個(gè)更有意義的名字時(shí)陋桂,類型別名非常有用逆趣。假設(shè)你正在處理特定長(zhǎng)度的外部資源的數(shù)
據(jù):
定義了一個(gè)類型別名之后,你可以在任何使用原始名的地方使用別名:
var maxAmplitudeFound = AudioSample.min // maxAmplitudeFound 現(xiàn)在是 0
本例中嗜历, AudioSample 被定義為 UInt16 的一個(gè)別名宣渗。因?yàn)樗莿e名抖所, AudioSample.min實(shí)際上是 UInt16.mi n ,所以會(huì)給 maxAmplitudeFound 賦一個(gè)初值0痕囱。

布爾值

Swift 有一個(gè)基本的布爾(Boolean)類型田轧,叫做 Bool 。布爾值指邏輯上的值鞍恢,因?yàn)樗鼈冎荒苁钦婊蛘呒偕嫡场wift 有兩個(gè)布爾常量,truefalse:

let orangesAreOrange = true
let turnipsAreDelicious = false```
當(dāng)你編寫條件語句比如 `if ` 語句的時(shí)候帮掉,布爾值非常有用:

if turnipsAreDelicious {
print("Mmm, tasty turnips!")
} else {
print("Eww, turnips are horrible.")
}
// 輸出 "Eww, turnips are horrible."```
如果你在需要使用 Bool 類型的地方使用了非布爾值弦悉,Swift 的類型安全機(jī)制會(huì)報(bào)錯(cuò)。下面的例子會(huì)報(bào)告一個(gè)編 譯時(shí)錯(cuò)誤:

let i = 1
 if i {
// 這個(gè)例子不會(huì)通過編譯蟆炊,會(huì)報(bào)錯(cuò) }

然而稽莉,下面的例子是合法的:

let i = 1
if i == 1 {
// 這個(gè)例子會(huì)編譯成功 }```
`i == 1 `的比較結(jié)果是 `Bool `類型,所以第二個(gè)例子可以通過類型檢查涩搓。
######元組
元組(tuples)把多個(gè)值組合成一個(gè)復(fù)合值污秆。元組內(nèi)的值可以是任意類型,并不要求是相同類型昧甘。
下面這個(gè)例子中混狠,` (404, "Not Found") `是一個(gè)描述 HTTP 狀態(tài)碼(HTTP status code)的元組。HTTP 狀態(tài)碼是 當(dāng)你請(qǐng)求網(wǎng)頁的時(shí)候 web 服務(wù)器返回的一個(gè)特殊值疾层。如果你請(qǐng)求的網(wǎng)頁不存在就會(huì)返回一個(gè) 404 Not Found 狀 態(tài)碼将饺。

let http404Error = (404, "Not Found")
// http404Error 的類型是 (Int, String),值是 (404, "Not Found")```
(404, "Not Found")元組把一個(gè)int 值和一個(gè)string 值組合起來表示 HTTP 狀態(tài)碼的兩個(gè)部分:一個(gè)數(shù)字 和一個(gè)人類可讀的描述痛黎。這個(gè)元組可以被描述為“一個(gè)類型為 ( int,string) 的元組”予弧。
你可以把任意順序的類型組合成一個(gè)元組,這個(gè)元組可以包含所有類型湖饱。只要你想掖蛤,你可以創(chuàng)建一個(gè)類型為(int,int,int) 或者 (int,int,bool) 或者其他任何你想要的組合的元組。
你可以將一個(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"```

如果你只需要一部分元組值蚓庭,分解的時(shí)候可以把要忽略的部分用下劃線( `_ `)標(biāo)記:

let (justTheStatusCode, _) = http404Error
print("The status code is (justTheStatusCode)") // 輸出 "The status code is 404"```

此外,你還可以通過下標(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"```

你可以在定義元組的時(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)頁的函數(shù)可能會(huì)返回一個(gè) (Int, String) 元組來描述是否 獲取成功港柜。和只能返回一個(gè)類型的值比較起來,一個(gè)包含兩個(gè)不同類型值的元組可以讓函數(shù)的返回信息更有 用。

注意:
元組在臨時(shí)組織值的時(shí)候很有用夏醉,但是并不適合創(chuàng)建復(fù)雜的數(shù)據(jù)結(jié)構(gòu)爽锥。如果你的數(shù)據(jù)結(jié)構(gòu)并不是臨時(shí)使用,請(qǐng)使
用類或者結(jié)構(gòu)體而不是元組畔柔。

可選類型

使用可選類型(optionals)來處理值可能缺失的情況氯夷。可選類型表示:

  • 有值靶擦,等于x
    或者
  • 沒有值

C 和 Objective-C 中并沒有可選類型這個(gè)概念肠槽。最接近的是 Objective-C 中的一個(gè)特性,一個(gè)方法要不返回一 個(gè)對(duì)象要不返回 nil 奢啥, nil 表示“缺少一個(gè)合法的對(duì)象”秸仙。然而,這只對(duì)對(duì)象起作用——對(duì)于結(jié)構(gòu)體桩盲,基本的 C 類型或者枚舉類型不起作用寂纪。對(duì)于這些類型,Objective-C 方法一般會(huì)返回一個(gè)特殊值(比如 NSNotFoun
d )來暗示值缺失赌结。這種方法假設(shè)方法的調(diào)用者知道并記得對(duì)特殊值進(jìn)行判斷捞蛋。然而,Swift 的可選類型可以讓 你暗示任意類型的值缺失柬姚,并不需要一個(gè)特殊值拟杉。
來看一個(gè)例子。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 或者什么都沒有。)
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ì)象類型。

######if 語句以及強(qiáng)制解析
你可以使用 `if `語句和 `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."```
######可選綁定
使用可選綁定(optional binding)來判斷可選類型是否包含值,如果包含就把值賦給一個(gè)臨時(shí)常量或者變 量昔搂×嵯可選綁定可以用在` if` 和 `while` 語句中,這條語句不僅可以用來判斷可選類型中是否有值摘符,同時(shí)可以將 可選類型中的值賦給一個(gè)常量或者變量贤斜。
像下面這樣在 if 語句中寫一個(gè)可選綁定:
你可以像上面這樣使用可選綁定來重寫 `possibleNumber` 這個(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` 語句的第一個(gè)分支中使用别凹。它已經(jīng)被可選類型 包含的 值初始化 過草讶,所以不需要再使用 ! 后綴來獲取它的值。在這個(gè)例子中炉菲,`actualNumber `只被用來輸出轉(zhuǎn)換結(jié)果堕战。
你可以在可選綁定中使用常量和變量。如果你想在`if`語句的第一個(gè)分支中操作 `actualNumber `的值拍霜,你可以改 成` if var actualNumber `嘱丢,這樣可選類型包含的值就會(huì)被賦給一個(gè)變量而非常量。
你可以包含多個(gè)可選綁定或多個(gè)布爾條件在一個(gè) if 語句中祠饺,只要使用逗號(hào)分開就行越驻。只要有任意一個(gè)可選綁定 的值為`nil`,或者任意一個(gè)布爾條件為`false`,則整個(gè)`if`條件判斷為`false`缀旁,這時(shí)你就需要使用嵌套` if` 條 件語句來處理记劈,如下所示:

if let firstNumber = Int("4"), let secondNumber = Int("42"), firstNumber < secondNumber && secondNumber <100{
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 條件語句中使用常量和變量來創(chuàng)建一個(gè)可選綁定,僅在 if 語句的句中( body )中才能獲取到 值并巍。相反目木,在 guard 語句中使用常量和變量來創(chuàng)建一個(gè)可選綁定,僅在 guard 語句外且在語句后才能獲取 到值懊渡。
(歡迎大家對(duì)不合適的地方進(jìn)行指正刽射,看完覺得有幫到你給點(diǎn)個(gè)贊??吧)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市剃执,隨后出現(xiàn)的幾起案子誓禁,更是在濱河造成了極大的恐慌,老刑警劉巖肾档,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件现横,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡阁最,警方通過查閱死者的電腦和手機(jī)戒祠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來速种,“玉大人姜盈,你說我怎么就攤上這事∨湔螅” “怎么了馏颂?”我有些...
    開封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)棋傍。 經(jīng)常有香客問我救拉,道長(zhǎng),這世上最難降的妖魔是什么瘫拣? 我笑而不...
    開封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任亿絮,我火速辦了婚禮,結(jié)果婚禮上麸拄,老公的妹妹穿的比我還像新娘派昧。我一直安慰自己,他們只是感情好拢切,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開白布蒂萎。 她就那樣靜靜地躺著,像睡著了一般淮椰。 火紅的嫁衣襯著肌膚如雪五慈。 梳的紋絲不亂的頭發(fā)上纳寂,一...
    開封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音泻拦,去河邊找鬼毙芜。 笑死,一個(gè)胖子當(dāng)著我的面吹牛聪轿,可吹牛的內(nèi)容都是我干的爷肝。 我是一名探鬼主播猾浦,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼陆错,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了金赦?” 一聲冷哼從身側(cè)響起音瓷,我...
    開封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎夹抗,沒想到半個(gè)月后绳慎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡漠烧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年杏愤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片已脓。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡珊楼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出度液,到底是詐尸還是另有隱情厕宗,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布堕担,位于F島的核電站已慢,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏霹购。R本人自食惡果不足惜佑惠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望齐疙。 院中可真熱鬧兢仰,春花似錦、人聲如沸剂碴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽忆矛。三九已至察蹲,卻和暖如春请垛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背洽议。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來泰國打工宗收, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人亚兄。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓混稽,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親审胚。 傳聞我的和親對(duì)象是個(gè)殘疾皇子匈勋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354