Swift語(yǔ)法基本總結(jié)

語(yǔ)言的基礎(chǔ)部分

程序是指令的集合碑韵,寫程序就是寫一系列的指令去控制計(jì)算機(jī)去做我們想做的事情留晚。
編譯:將程序設(shè)計(jì)語(yǔ)言轉(zhuǎn)換成計(jì)算機(jī)能夠理解的機(jī)器語(yǔ)言或者某種中間代碼的過(guò)程。

馮諾依曼體系結(jié)構(gòu)的計(jì)算機(jī):

  1. 使用二進(jìn)制
  2. 程序存儲(chǔ)執(zhí)行

變量和常量

定義變量和常量是為了保存數(shù)據(jù),變量和常量就是某種類型的值得存儲(chǔ)空間脾猛。

var a: Int = 10
a = 100
var b: Int
b = 1000
var c = 1000

let d: Int = 10
// d = 100  // compiler error 編譯錯(cuò)誤
let e = 1000

說(shuō)明:1. Swift有非常強(qiáng)大的類型推斷箍镜,所以在定義變量時(shí)如果可以的話應(yīng)該直接使用類型推斷,不用手動(dòng)指定類型;2. 如果可以的話應(yīng)該盡可能使用常量而不是變量

語(yǔ)言元素

var a: Int = 10

關(guān)鍵字: 有特殊含義的單詞.
標(biāo)識(shí)符: 給變量渔欢、常量墓塌、函數(shù)、類奥额、結(jié)構(gòu)苫幢、協(xié)議、枚舉垫挨、方法韩肝、屬性等起的名字。
六條規(guī)則:

1.字母數(shù)字下劃線九榔,不能用數(shù)字進(jìn)行開(kāi)頭
2.大小寫敏感(區(qū)分大小寫)
3.不能使用關(guān)鍵字做標(biāo)識(shí)符
4.使用駝峰命名法(命名變量哀峻、常量、函數(shù)哲泊、方法剩蟀、屬性第一個(gè)單詞小寫,從第二個(gè)單詞開(kāi)始每個(gè)單詞首字母大寫:命名類切威、結(jié)構(gòu)育特、協(xié)議、枚舉每個(gè)單詞首字母都要大寫)
5.見(jiàn)名知意

  1. 命名私有的屬性和方法時(shí)以下劃線開(kāi)頭

運(yùn)算符:Swift中的運(yùn)算符其實(shí)都是函數(shù)

  1. 賦值運(yùn)算符:=先朦、+缰冤、-=、...
  2. 算術(shù)運(yùn)算符:+喳魏、-棉浸、*、/截酷、%
  3. 關(guān)系(比較)運(yùn)算符:==涮拗、!=、<迂苛、<=三热、>、>=
  4. 邏輯運(yùn)算符:&&三幻、||就漾、!
  5. 三元條件運(yùn)算符:? :
  6. 其他運(yùn)算符:[]、.念搬、??抑堡、?摆出、!、

字面(常)量:

  1. 整數(shù)字面量: 10首妖、1_234_567偎漫、0x10、0o10=8有缆、0b10=2
  2. 小數(shù)字面量: 123.45象踊、1.2345e2=1.2345x10?2、0xab.cdp2
  3. 字符字面量: "e"棚壁、"\n"杯矩、"\u(41)"、"\u(e9)"
  4. 字符串字面量: "Hello"袖外、"caf\u(e9)"
  5. 布爾字面量: true史隆、false
  6. 空值字面量: nil
  7. 類型字面量: String.self(類型)、UILable.self

分隔符: 將不同的語(yǔ)言元素符號(hào)分開(kāi)

說(shuō)明:Swift中每個(gè)語(yǔ)句后面不用寫分號(hào),寫代碼時(shí)盡量保證一行只有一條語(yǔ)句這樣就可以省略掉分號(hào)曼验。

分支和循環(huán)

分支

  • if ...else:
下面代碼實(shí)現(xiàn)了分段式函數(shù)求值
let x = 3.2
let y:Double
if x < -1 {
  y = 3 * x + 5
}
else if x <= 1{
    y = 5 * x - 3
}
else{
y = 7 * x + 1
}
print("f(\(x)) = \(y)")
  • switch case default:
下面代碼實(shí)現(xiàn)了數(shù)字
 let score = 92.5
let level:String
switch score{
case 0..<60:
    level = "E"
case 60..<70:
    level = "D"
case 70..<80:
    level = "C"
case 80..<90:
    level = "B"
case 90..<100:
    level = "A"
default:
    level = "輸入錯(cuò)誤"
}
print(level)

例如:工資泌射、搖色子

循環(huán)

下面實(shí)現(xiàn)了while ture循環(huán) 分魚過(guò)程

  • while ture
 var total = 1
 while ture {
 var fish = total
 var isEnough = true 
 for _ in 1...5 {
  if(fish - 1) % 5 == 0 {
  fish = (fish - 1) / 5 * 4
  }
  else {
  isEnough = false
  break
  }
 }
 if isEnough {
 print(total)
 break
 }
 total += 1
 }
  • repeat...while
下面實(shí)現(xiàn)了repeat..while循環(huán),對(duì)Hello.World做了一百次循環(huán)
repeat {
print("\(i).Hello.World!")
   i += 1
}
 while i <= 100
 ```





-  for...
```Swift
下面實(shí)現(xiàn)了For循環(huán),99乘法表
for j in 1...99 {
print("9 * \(j) = \(9 * j)",terminator:"")
}

窮舉法:窮盡所有可能性直到找到正確答案

下面程序?qū)崿F(xiàn)了squot,例子"百錢白雞"
 for x = 0...20 {
 for y = 0...33{
 let z = x - y 
 if 5 * x + 3 * y + z/3 == 100 && z % 3 == 0 {
 print("公雞:\(x),母雞:\(y),小雞:\(z)")
                }
             }
         }

注意:在循環(huán)中可以使用break關(guān)鍵字來(lái)提前終止循環(huán),也可以使用continue關(guān)鍵字使循環(huán)直接進(jìn)入下一輪蚣驼,但是應(yīng)該盡量減少對(duì)break和continue的使用,因?yàn)樗鼈儾粫?huì)讓你的程序變得更好.

綜合案例:craps賭博游戲
游戲規(guī)則:玩家搖色子魄幕,如果第一次搖出了7點(diǎn)或者11點(diǎn)相艇,萬(wàn)家勝颖杏;如果搖出2,3或者12點(diǎn)坛芽,莊家勝留储;其他點(diǎn)數(shù)游戲繼續(xù)。第二輪搖色子如果搖到7點(diǎn)咙轩,莊家勝获讳,否則玩家繼續(xù)搖色子直到分出勝負(fù)。

func roll() -> Int {
return Int(arc4random_uniform(6)) + 1
}
let firstPoint = roll() + roll()
print("玩家搖出了\(firstPoint)點(diǎn)")
var needsGoOn = false
case 7, 11: print("玩家勝")
case 2, 3, 12 : print("莊家勝!")
default: needsGoOn {
let currentPoint = roll() + roll()
print("玩家搖出了\(currentPoint)點(diǎn)")
if currenPoint == 7 {
print("莊家勝")
needsGoOn = false 
}
else if currentPoint = firstPoint {
print("萬(wàn)家勝")
isNeedsGoOn = false
           }

      }
}
switch firstPoint{}

容器

數(shù)組

  • 創(chuàng)建數(shù)組
var array1:[Int] = []
var array1: Array<Int> = []
var array2 = [1, 2, 3, 4, 5]
var array3 = [Int](coount: 5, repeatedValue: 0)
var array3 = Array<Int>(count:5, repeatedValue: 0)
  • 添加元素
 array1.append(2)
 array1.append(3)
 array1.append(1, atIndex:0)
 array1.insert(4, atIndex: array1.count)
 array1 += [5]
 array1 += [6, 7, 8]
  • 刪除元素
array1.remove 
array1.removeFirst()
array1.removeLast()
array1.removerange(1...2)
array1.removeAll()
  • 修改元素
 array[0] = 100
 array3[array3.count - 1] = 500
 print(array3)

切記不能越界

  • 遍歷數(shù)組

1.方式1:for 循環(huán)

for i in 0..<array3.count{
print(array3[i])
}

2.方式2:for..in循環(huán)

for temp in array3 {
print(temp)
}

注意: for-in循環(huán)是一個(gè)只讀循環(huán)活喊,也就意味著再循環(huán)的過(guò)程中不能對(duì)數(shù)組的元素進(jìn)行修改

3.方式3:枚舉循環(huán)

for (i, temp) in array3.enumerate() {
if i == 0 {
       array 3[i] = 1
}
print("\(i). \(temp)")
}

** 提醒:**操作數(shù)組時(shí)最重要的是不能操作越界去訪問(wèn)元素.數(shù)組對(duì)象的count屬性表面了數(shù)組中有多少個(gè)元素丐膝,那么有效的索引(下標(biāo))范圍是0到count-1

  • 數(shù)組中的元素也可以是數(shù)組,因此我們可以構(gòu)造多維數(shù)組钾菊。最常見(jiàn)的是二維素
  • 數(shù)組帅矗,它相當(dāng)于是一個(gè)有行有列的數(shù)組,數(shù)組中的每個(gè)元素代表一行煞烫,該數(shù)組中的每個(gè)元素代表行里面的列浑此。二維數(shù)組可以模擬現(xiàn)實(shí)世界中的表格、矩陣滞详、棋盤凛俱、2D格子類游戲的地圖紊馏,所以在實(shí)際開(kāi)發(fā)中使用的十分廣泛
  • 用二維數(shù)組模擬表格的例子:
func randomInt(min: UInt32,max:UInt32) -> Int )
let namesArray = ["關(guān)羽", "張飛", "趙云", "馬超", "黃忠"]
let ciyrsesArray = ["語(yǔ)文","數(shù)學(xué)","英語(yǔ)"]
var scoresArray = [[Double]](count: namesArray.count,
repeatedValue:[Double](count: coursesArray.count,
repeatedValue:0))
for i in 0..<scoresArray.count {
     for j in 0..<scoresArray[i].count{
         scoresArray[i][j] = Double(randomInt(0, max:100))
    }
}
for(index, array) in  scoresArray.enumerate(){
var sum = 0.0
for score in array {
sum += score
}
print("\(namesArray[index]的平均成績(jī)?yōu)?\(avg)")
}
for i in 0..<coursesArray.count{}
var sum = 0.0
for row in 0..<scoresArray.count {
     sum += scoresArray[row][1]
    }
let avg = sum / Double(namesArray.count)
print("語(yǔ)文課的平均成績(jī)?yōu)?\(avg)")
}

數(shù)組是使用聯(lián)系的內(nèi)存空間來(lái)保存

集合

集合在內(nèi)存中是離散的,集合中的元素通過(guò)計(jì)算Hash Code(哈希碼或散列碼)來(lái)決定存放在內(nèi)存中的什么位置,集合中不允許有重復(fù)元素

  • 創(chuàng)建集合
集合的遍歷
  var set: Set<Int> = [1, 2, 1, 2, 3,200,55,44]
  set.insert(100) //添加元素insert 刪除元素remove
  for temp in set {
       print(temp)
  }
  • 添加和刪除元素
  • intersect 交集 union 并集 subtract 差集

字典(重要)

字典是以鍵值對(duì)的方式保存數(shù)據(jù)的容器.字典中的元素是鍵值對(duì)組合.通過(guò)鍵可以找到對(duì)應(yīng)的值.

  • 創(chuàng)建字典 冒號(hào)前面是值得類型蒲犬,冒號(hào)后面是鍵的類型
let dict:[Int:String] = [ 
  1:"Hello",
  2: "Good",
  3: "Wonderful",
  5: "delicious"
]
if let str = dict[1]
     print(str)
     }
     else{
     print("找不到")
     }
  • 添加元素和刪除元素
  dict[4] = "Shit" 添加元素
  dict.count
  dict
dict[5] = nil 刪除元素
removerValueForKey(5) 同上,但是更麻煩
dict[3] = "shamte" 修改

Int String Double 都是遵循了Hashable協(xié)議朱监。

  • 遍歷元素
第一種
for key in dict.keys {
print("\(key) ---> \(dict[key]!)") 感嘆號(hào):拆封還原
}
```Swift
第二種
for value in dict.value{
print(value)
}
```
```Swift
第三種
for (key, value) in dict.enumerate() {
print("\(index).\(value.0) --->\(value.1)")
} 
```

重要操作

  • 排序
    1.sort
    2.sortInPlace

說(shuō)明:排序方法的參數(shù)是一個(gè)閉包(closure),該閉包的作用是比較數(shù)組中倆個(gè)元素的大小

let array = [23, 45 ,12 ,33, 56, 77]
array.sort(<) 比自然序,不用傳參

array.sort({(one:Int,two:Int) -> Bool in return one < two
})
array.sort({(one,two) in one < two}) 省類型
array.sort({one,two in one < two})
array.sort({ $0 < $1})
array.sort{$0 < $1}
array.sort(<)
從復(fù)雜到簡(jiǎn)單的寫法(排序)
數(shù)據(jù)調(diào)整三部:
  • 過(guò)濾
let array = [23, 45, 12, 89, 98]
// 篩選掉不滿足條件的
let newArray = array.filter{ $0 > 50}
print(newArray) //[89, 98, 55]

  • 映射
let array = [23, 45, 12, 89, 98, 55]
//通過(guò)映射對(duì)數(shù)據(jù)進(jìn)行變換
let newArray =  array.map{$0 % $10}
print(newArray)
  • 規(guī)約
let array = [23, 45, 12, 89, 98, 55]
let result = array.reduce(0,combine: +)
print(result)

函數(shù)和閉包

函數(shù)是獨(dú)立的可重復(fù)使用的功能模塊原叮,如果程序中出現(xiàn)了大量的重復(fù)代碼赌朋,通常都可以將這部分功能封裝成一個(gè)獨(dú)立的函數(shù),在Swift中篇裁,函數(shù)是"一等公民",函數(shù)作為 類型來(lái)使用沛慢,也就是說(shuō)函數(shù)可以賦值給一個(gè)變量或常量,可以將函數(shù)作為函數(shù)的參數(shù)或者返回值,還可以使用高階函數(shù)达布。

func 函數(shù)名([參數(shù)1:類型团甲,參數(shù)2:類型,...]) [throws|rethrows] -> 返回類型 {
函數(shù)的執(zhí)行體 [return 表達(dá)式]
} 左花括號(hào)開(kāi)始右花括號(hào)結(jié)束
  • 外部參數(shù)名
func addtion(a:Int, b:Int) -> Int {

}
  • inout參數(shù)
func mySwap<T>(inout a: T, inout _ b: T) {
  let temp = a
  a = b
  b = temp

  • 可變參數(shù)列表
func sum(input: Int...) -> Int {
  //...
}
  • 閉包:就是沒(méi)有名字的函數(shù)(匿名函數(shù))或者稱之為函數(shù)表達(dá)式(Lambda表達(dá)式),Objective-C中與之對(duì)應(yīng)的概念叫block.如果一個(gè)函數(shù)的參數(shù)類型是函數(shù)我們可以傳入一個(gè)閉包表達(dá)式;如果一個(gè)函數(shù)的返回類型是函數(shù)我們可以返回一個(gè)閉包黍聂;如果一個(gè)類的某個(gè)屬性是函數(shù)我們也可以將一個(gè)閉包表達(dá)式賦值給它躺苦。
{([參數(shù)列表])} [-> 返回類型] in 代碼 }

面向?qū)ο缶幾g(OOP)

基本概念

對(duì)象:接受消息的單元.對(duì)象是一個(gè)具體的概念.

類:對(duì)象是藍(lán)圖和模板,類是一個(gè)抽象概念.數(shù)據(jù)抽象和行為抽象
消息:對(duì)象之間通信的手段.通過(guò)給對(duì)象發(fā)消息可以讓對(duì)象執(zhí)行相應(yīng)的操作,來(lái)解決問(wèn)題

四大支柱

抽象:定義類的過(guò)程就是一個(gè)抽象的過(guò)程产还,需要做數(shù)據(jù)抽象和行為抽象.數(shù)據(jù)抽象找到對(duì)象屬性(保存對(duì)象狀態(tài)的存儲(chǔ)屬性),行為抽象找到對(duì)象的方法(可以給對(duì)象發(fā)的消息).

封裝:
觀點(diǎn)1.我們?cè)陬愔袑懛椒ㄆ鋵?shí)就是在封裝API(接口),方法的內(nèi)部實(shí)現(xiàn)可能會(huì)很復(fù)雜匹厘,但是這些對(duì)調(diào)用者來(lái)說(shuō)是不可見(jiàn)的,調(diào)用只能看到方法有一個(gè)簡(jiǎn)單清晰的接口脐区,這就是封裝.
觀點(diǎn)2.將對(duì)象的屬性和操作這些屬性的方法綁定在一起.
觀點(diǎn)3.隱藏一切可以隱藏的實(shí)現(xiàn)細(xì)節(jié),提供簡(jiǎn)單清晰的接口(界面)

繼承:
從已有的類創(chuàng)建新的類 父類 -> 子類

多態(tài):

1.子類在繼承父類的過(guò)程中
2.用父類的對(duì)象去引用子類對(duì)象
3.重載 - overload
4.重寫 - override

三個(gè)步驟

1.定義類

  • 數(shù)據(jù)抽象
    • 存儲(chǔ)屬性
  • 行為抽象
    • 方法 (寫到類里面的函數(shù)就是方法)
      • 對(duì)象方法:給對(duì)象發(fā)的消息
      • 類方法: 給類發(fā)的消息愈诚,與對(duì)象的狀態(tài)無(wú)關(guān)的方法,給類發(fā)消息(static.clase)
    • 計(jì)算屬性
  • 構(gòu)造器
    - 指派構(gòu)造器
    - 便利構(gòu)造器(convenience)
    - 必要構(gòu)造器(required)
    2.創(chuàng)建對(duì)象
    3.給對(duì)象發(fā)消息

相關(guān)內(nèi)容

  • 枚舉

  • 結(jié)構(gòu)(體)

總結(jié): 類和結(jié)構(gòu)的區(qū)別到底有哪些?什么時(shí)候應(yīng)該使用結(jié)構(gòu)牛隅?什么時(shí)候應(yīng)該使用類炕柔?
答:

  • 擴(kuò)展(extension)

  • 運(yùn)算符重載

  • 下標(biāo)運(yùn)算(subscript)

  • 訪問(wèn)修飾符

    • private
    • internal
    • public

面向協(xié)議編程(POP)

協(xié)議

protocol 協(xié)議名[:父協(xié)議,...] {
    // 方法的集合(計(jì)算屬性相當(dāng)于就是方法)
}

1.協(xié)議表能力:
2.協(xié)議表約定:
3.協(xié)議表角色:

依賴倒轉(zhuǎn)原則

設(shè)計(jì)模式

一個(gè)對(duì)象想做某件事情但自身沒(méi)有能力做這件事情就可以使用委托回調(diào)媒佣,具體的步驟是:

  • 代理模式
  • 用協(xié)議實(shí)現(xiàn)委托回調(diào):
  • 設(shè)計(jì)協(xié)議匕累,被委托方要遵循協(xié)議并實(shí)現(xiàn)協(xié)議方法
  • 委托方有一個(gè)屬性是協(xié)議類型,通過(guò)該屬性可以調(diào)用協(xié)議中的方法
  • 委托方協(xié)議類型屬性通常是可控類型默伍,要寫成 weak(弱)引用

注意:委托方的協(xié)議類型的屬性通常是可空類型欢嘿,所以要加weak弱引用

其他

  • 協(xié)議組合:protocol<協(xié)議1,協(xié)議2也糊,協(xié)議3,....>
  • 可選方法
  • 協(xié)議擴(kuò)展:對(duì)協(xié)議中的方法給出默認(rèn)實(shí)現(xiàn)

泛型

讓類型不在是程序中的硬代碼(hard code)炼蹦。

  • 泛型函數(shù)

  • 反省類/結(jié)構(gòu)/枚舉

相關(guān)知識(shí)

  • 泛型限定
  • where字句

錯(cuò)誤處理

enum MyError: ErrorType{
  case A
  case B
  case C
}
  • throw
  • throws / rethrows
  • do // 包圍出錯(cuò)的代碼
  • catch // 捕獲出錯(cuò)的代碼
  • try // 嘗試運(yùn)行

邊角知識(shí)

  • ARC
  • 正則表達(dá)式
  • 嵌套類型
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市显设,隨后出現(xiàn)的幾起案子框弛,更是在濱河造成了極大的恐慌,老刑警劉巖捕捂,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瑟枫,死亡現(xiàn)場(chǎng)離奇詭異斗搞,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)慷妙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門僻焚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人膝擂,你說(shuō)我怎么就攤上這事虑啤。” “怎么了架馋?”我有些...
    開(kāi)封第一講書人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵狞山,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我叉寂,道長(zhǎng)萍启,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任屏鳍,我火速辦了婚禮勘纯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘钓瞭。我一直安慰自己驳遵,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布山涡。 她就那樣靜靜地躺著堤结,像睡著了一般。 火紅的嫁衣襯著肌膚如雪佳鳖。 梳的紋絲不亂的頭發(fā)上霍殴,一...
    開(kāi)封第一講書人閱讀 51,370評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音系吩,去河邊找鬼。 笑死妒蔚,一個(gè)胖子當(dāng)著我的面吹牛穿挨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播肴盏,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼科盛,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了菜皂?” 一聲冷哼從身側(cè)響起贞绵,我...
    開(kāi)封第一講書人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎恍飘,沒(méi)想到半個(gè)月后榨崩,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體谴垫,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年母蛛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了翩剪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡彩郊,死狀恐怖前弯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情秫逝,我是刑警寧澤恕出,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站违帆,受9級(jí)特大地震影響剃根,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜前方,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一狈醉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧惠险,春花似錦苗傅、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至抱慌,卻和暖如春逊桦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背抑进。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工强经, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人寺渗。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓匿情,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親信殊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子炬称,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

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