【譯】MacOS 開(kāi)發(fā)入門1

源網(wǎng)頁(yè):macOS Development for Beginners: Part 1

你想學(xué)習(xí)如何開(kāi)發(fā)自己的macOS app嗎吮铭?

好消息蚪拦! Apple使macOS的開(kāi)發(fā)變非常簡(jiǎn)單非春,在本系列教程中遂跟,您將學(xué)習(xí)如何做。 您將學(xué)習(xí)如何為macOS創(chuàng)建第一個(gè)應(yīng)用程序-即使您是一個(gè)完整的初學(xué)者。

在第一部分中吹由,您將首先了解如何獲取為macOS開(kāi)發(fā)所需的工具。 然后盯腌,在創(chuàng)建一個(gè)簡(jiǎn)單的“ Hello溉知,World!”應(yīng)用程序時(shí)腕够,您將瀏覽Xcode级乍,探索如何運(yùn)行應(yīng)用程序,編輯代碼帚湘,設(shè)計(jì)UI和調(diào)試代碼玫荣。

在本系列的第2部分和第3部分中,您將創(chuàng)建一個(gè)更復(fù)雜的Egg Timer應(yīng)用程序大诸,并了解構(gòu)成macOS應(yīng)用程序的組件捅厂,從應(yīng)用程序的啟動(dòng)方式到構(gòu)建UI以及處理用戶交互的所有方式。

你還在等什么资柔? 桌面應(yīng)用程序的世界正等待著您焙贷!

注意:以下是有關(guān)從本系列文章開(kāi)始的一些指導(dǎo):如果您是Swift的新手,那么本系列假定您具有一些Swift知識(shí)贿堰,因此辙芍,請(qǐng)首先查看我們的Swift教程以獲取出色的介紹。如果您已經(jīng)有iOS經(jīng)驗(yàn)羹与,那么將對(duì)該系列的第一部分進(jìn)行回顧故硅。 快速瀏覽主題以確保確定,然后直接跳到本系列的下一部分纵搁。否則吃衅,請(qǐng)繼續(xù)閱讀。 本系列適用于初學(xué)者-無(wú)需具備針對(duì)iOS或macOS開(kāi)發(fā)的經(jīng)驗(yàn)腾誉!

入門

要成為macOS開(kāi)發(fā)人員徘层,您需要做兩件事:

運(yùn)行macOS Sierra的Mac:macOS操作系統(tǒng)僅在Apple計(jì)算機(jī)上運(yùn)行峻呕,??因此您既需要Mac也要開(kāi)發(fā)和運(yùn)行macOS應(yīng)用程序。

Xcode:這是用于創(chuàng)建macOS應(yīng)用程序的IDE惑灵。您將在本節(jié)的后面部分學(xué)習(xí)如何安裝它山上。

構(gòu)建完應(yīng)用程序后眼耀,如果要將其上傳到App Store進(jìn)行分發(fā)英支,則還需要為Apple開(kāi)發(fā)者帳戶付費(fèi)。但這不是必須的哮伟,除非您準(zhǔn)備將您的應(yīng)用程序發(fā)布到全世界干花,甚至在您希望通過(guò)Mac App Store分發(fā)時(shí)也是如此。如果您已經(jīng)擁有用于分發(fā)iOS應(yīng)用程序的開(kāi)發(fā)人員帳戶楞黄,那么您已經(jīng)準(zhǔn)備就緒-Apple已合并了開(kāi)發(fā)人員帳戶池凄,因此您只需要一個(gè)帳戶即可為任何Apple設(shè)備分發(fā)應(yīng)用程序。

與其他平臺(tái)不同鬼廓,為macOS開(kāi)發(fā)僅需安裝一個(gè)工具:Xcode肿仑。 Xcode是一個(gè)IDE(集成開(kāi)發(fā)環(huán)境),其中包括開(kāi)發(fā)macOS碎税,iOS尤慰,watchOS和tvOS應(yīng)用程序所需的一切。

如果您還沒(méi)有Xcode雷蹂,請(qǐng)單擊菜單左上方的Apple圖標(biāo)伟端,然后選擇App Store…以打開(kāi)Mac App Store。 即使Xcode是免費(fèi)的匪煌,您仍需要一個(gè)App Store帳戶才能下載Xcode责蝠。


下載Xcode

搜索Xcode,然后單擊“安裝”按鈕開(kāi)始下載萎庭。 下載并安裝(可能要花一些時(shí)間-很大)之后霜医,從“應(yīng)用程序”文件夾中將其打開(kāi)。 首次運(yùn)行Xcode時(shí)驳规,以及每次重大更新后肴敛,它將要求您許可安裝其他組件。 輸入您的密碼达舒,并允許Xcode安裝這些組件值朋。


下載Xcode

Hello World !

遵循學(xué)習(xí)新的編程語(yǔ)言或平臺(tái)的悠久傳統(tǒng)巩搏,您將首先創(chuàng)建一個(gè)Hello World昨登! 適用于macOS的應(yīng)用程序。

打開(kāi)Xcode(如果尚未運(yùn)行)贯底。 您應(yīng)該會(huì)看到一個(gè)歡迎界面-如果沒(méi)有看到丰辣,請(qǐng)從“窗口”菜單中選擇“welcome to Xcode”撒强。


Xcode歡迎界面

單擊創(chuàng)建新的Xcode項(xiàng)目,然后在出現(xiàn)下一個(gè)對(duì)話框時(shí)笙什,從頂部的選項(xiàng)卡中選擇macOS飘哨。 從“應(yīng)用程序”部分中選擇“ Cocoa應(yīng)用程序”,然后單擊“下一步”琐凭。


創(chuàng)建新項(xiàng)目

為您的新應(yīng)用命名-HelloWorld-確保將語(yǔ)言設(shè)置為Swift芽隆,并選中“使用情節(jié)提要”。 取消選中所有其他選項(xiàng)统屈。


創(chuàng)建文件時(shí)的選項(xiàng)

單擊下一步并創(chuàng)建以保存新的應(yīng)用程序項(xiàng)目胚吁。

運(yùn)行您的應(yīng)用

Xcode已使用所有必需的文件為您的應(yīng)用程序創(chuàng)建了基本模板。 此時(shí)運(yùn)行該應(yīng)用程序愁憔,看看你不費(fèi)吹灰之力就做出了什么腕扶。

單擊工具欄中的“播放”按鈕以運(yùn)行應(yīng)用程序或使用Command-R快捷方式。 Xcode現(xiàn)在將所有代碼編譯為機(jī)器代碼吨掌,捆綁應(yīng)用程序所需的資源半抱,然后執(zhí)行它。


點(diǎn)擊運(yùn)行按鈕

注意:首次使用Xcode構(gòu)建和運(yùn)行應(yīng)用程序時(shí)膜宋,可能會(huì)詢問(wèn)您是否要在此Mac上啟用開(kāi)發(fā)人員模式窿侈。 您可以安全地選擇啟用,這時(shí)您可能需要輸入密碼激蹲。 開(kāi)發(fā)人員模式允許Xcode將調(diào)試器附加到正在運(yùn)行的進(jìn)程–這在構(gòu)建應(yīng)用程序時(shí)將非常有用棉磨!

現(xiàn)在,您應(yīng)該會(huì)看到一個(gè)空白窗口学辱,但不要失望-看看您已經(jīng)可以做什么:

  • 窗口是可調(diào)整大小的乘瓤,可以最小化并使其全屏顯示。
  • 有一整套的菜單策泣,其中的許多菜單無(wú)需您執(zhí)行任何操作即可使用衙傀。
  • Dock圖標(biāo)具有通常的菜單。

  • 你創(chuàng)建的應(yīng)用程序

    但是現(xiàn)在是時(shí)候讓您的界面更加有趣了萨咕,因此退出應(yīng)用程序并返回Xcode统抬。

    Xcode介面

    Xcode將許多功能打包到一起,因此并非一次都能看到所有內(nèi)容危队。 要成為高效的Xcode用戶聪建,您需要知道一切都在哪里-以及如何實(shí)現(xiàn)。

    在Xcode中打開(kāi)新項(xiàng)目時(shí)茫陆,將出現(xiàn)一個(gè)帶有工具欄和三個(gè)主面板的窗口金麸。


    Xcode界面

    左側(cè)面板是“Navigator(導(dǎo)航器)”面板,頂部有8個(gè)顯示選項(xiàng)簿盅。 您將最常使用的一個(gè)是第一個(gè)-Project(工程)-它列出了項(xiàng)目中的所有文件挥下,并允許您單擊任意一個(gè)進(jìn)行編輯揍魂。

    中間面板是“Editor(編輯器)”面板,它將顯示您從“Project Navigator(項(xiàng)目瀏覽器)”中選擇的任何內(nèi)容棚瘟。

    右側(cè)面板是“Utilities(實(shí)用工具)”面板现斋,它會(huì)根據(jù)您在“Editor(編輯器)”面板中的顯示而變化。

    添加UI

    您可以使用Storyboard(情節(jié)提要)設(shè)計(jì)用戶界面偎蘸。 您的應(yīng)用程序已經(jīng)有一個(gè)Storyboard(情節(jié)提要)庄蹋,因此請(qǐng)轉(zhuǎn)到“Project Navigator(項(xiàng)目導(dǎo)航器)”并單擊Main.storyboard,以在“編輯器”面板中顯示它禀苦。

    您的顯示發(fā)生了巨大變化蔓肯! 現(xiàn)在,在“編輯器”面板中振乏,您可以看到文檔大綱和UI的可視編輯器。

    看一下您在可視化編輯器中可以看到的內(nèi)容秉扑。 有三個(gè)主要區(qū)域慧邮,每個(gè)區(qū)域在文檔大綱中都有一個(gè)文本表示形式:

  • Application Scene(應(yīng)用場(chǎng)景):菜單欄和項(xiàng)目曼追。
  • Window Controller Scene(窗口控制器場(chǎng)景):配置窗口的行為方式撰洗。
  • View Controller Scene(視圖控制器場(chǎng)景):UI元素的去向。
  • 在“實(shí)用工具”面板中果正,您將看到頂部帶有8個(gè)選項(xiàng)卡秦躯,底部的部分具有4個(gè)選項(xiàng)卡忆谓。

    底部在可插入項(xiàng)目的各種內(nèi)容之間切換。 現(xiàn)在踱承,您要插入U(xiǎn)I元素倡缠,因此請(qǐng)選擇左側(cè)第三個(gè)Object library(對(duì)象庫(kù))。在底部的過(guò)濾器中茎活,鍵入“文本”以減少選擇的數(shù)量昙沦,然后將“文本字段”拖到View Controller場(chǎng)景中。在底部的過(guò)濾器中载荔,鍵入“文本”以減少選擇的數(shù)量盾饮,然后將Text Field(文本字段)拖到View Controller Scene(視圖控制器界面)中。


    添加元件

    譯者注:新版本Xcode(如Xcode11)中不存在底部部分懒熙,而是將添加元件的移動(dòng)至右上角加號(hào)按鈕

    添加元件的移動(dòng)至右上角加號(hào)按鈕

    現(xiàn)在過(guò)濾Push Button(按鈕)并將Push Button(按鈕)拖到View Controller Scene(視圖控制器界面)中丘损。 最后,添加Label(標(biāo)簽)工扎。

    現(xiàn)在徘钥,使用Play(播放)按鈕或Command-R構(gòu)建并運(yùn)行該應(yīng)用程序。 您將看到這3個(gè)UI元素定庵。 嘗試在文本字段中輸入-它已經(jīng)支持所有標(biāo)準(zhǔn)的編輯快捷方式:復(fù)制吏饿,粘貼踪危,剪切,全選猪落,撤消贞远,重做等。 但是按鈕沒(méi)有任何作用笨忌,標(biāo)簽僅顯示“標(biāo)簽”蓝仲,因此現(xiàn)在該使事情更具交互性了。

    配置UI

    返回Main.storyboard并單擊按鈕將其選中官疲。 在右側(cè)的Utilities(實(shí)用工具)面板中袱结,確保顯示Attributes Inspector(“屬性”檢查器)-頂部的第4個(gè)(譯者注:Xcode11中是第五個(gè))按鈕。

    將按鈕的標(biāo)題更改為“Say Hello”途凫。 該按鈕的寬度可能不足以顯示所有文本垢夹,因此請(qǐng)轉(zhuǎn)到Editor(編輯器)菜單并選擇Size to Fit Content(大小以適合內(nèi)容),這應(yīng)該可以解決該問(wèn)題维费。 (如果禁用了“適合內(nèi)容的大小”果元,請(qǐng)單擊某處以取消選擇該按鈕,然后重新選擇它并重試犀盟。)


    更改按鈕上的文字

    現(xiàn)在單擊?text field?(文本字段)以將其選中而晒。 對(duì)于此應(yīng)用程序,用戶將在此處輸入其名稱阅畴,然后單擊按鈕倡怎,該應(yīng)用程序?qū)⒃跇?biāo)簽中顯示“ Hello name-goes-here!”贱枣。 為了幫助用戶监署,(你應(yīng)該)使用Attributes Inspector(”屬性“檢查器)在文本字段中添加一些占位符文本。

    稍微擴(kuò)展文本字段以容納更長(zhǎng)的內(nèi)容冯事,然后將按鈕放在其右側(cè)焦匈。 在View Controller Scene中拖動(dòng)對(duì)象時(shí),會(huì)出現(xiàn)藍(lán)線昵仅,以幫助您對(duì)齊和定位對(duì)象缓熟,這項(xiàng)技術(shù)基于Apple的《人機(jī)界面指南》(?Apple’s Human Interface Guidelines)。


    添加占位符文本

    將標(biāo)簽放在文本字段和按鈕下方摔笤。 由于標(biāo)簽將很重要够滑,因此請(qǐng)使用更大的字體:選擇標(biāo)簽,然后在Attributes Inspector(“屬性”檢查器吕世,下略)中彰触,將字體更改為System Regular 30(系統(tǒng)常規(guī)30)。


    更改字體大小

    將文字變成紅色使之更加顯眼如何命辖?


    更改顏色

    您無(wú)法確定用戶輸入名字的長(zhǎng)度况毅,因此請(qǐng)調(diào)整字段大小以適合該字體的高度并幾乎填滿窗口的寬度分蓖。

    生成并運(yùn)行該應(yīng)用程序,以檢查您的UI更改是否已生效尔许。 對(duì)標(biāo)簽中的文本外觀滿意后么鹤,請(qǐng)刪除標(biāo)簽的標(biāo)題,以使標(biāo)簽開(kāi)始為空味廊。

    將UI與代碼關(guān)聯(lián)

    您的應(yīng)用仍然無(wú)法執(zhí)行您想要的操作蒸甜,但是要使其正常運(yùn)行,您需要開(kāi)始添加代碼余佛,并且該代碼必須能夠與UI進(jìn)行通信柠新。 要建立這些鏈接,您將使用Xcode的Assistant Editor(助手編輯器)辉巡。 在Main.storyboard可見(jiàn)的情況下恨憎,在Project Navigator(項(xiàng)目導(dǎo)航器)中單擊ViewController.swift。 這將創(chuàng)建另一個(gè)包含ViewController代碼的編輯器面板红氯。

    根據(jù)顯示器的大小框咙,現(xiàn)在可能看起來(lái)有些局促,因此請(qǐng)使用工具欄中最右邊的按鈕隱藏實(shí)用程序痢甘。 如果您需要更多空間,請(qǐng)隱藏導(dǎo)航器茉贡。


    隱藏導(dǎo)航器

    選擇text field(文本字段)塞栅。 按住Control鍵,然后從文本字段拖動(dòng)到ViewController類定義的頂部腔丧。 放手放椰,在彈出的名稱框中輸入nameField,然后單擊“連接”愉粤。


    拖動(dòng)以連接UI與代碼

    對(duì)標(biāo)簽執(zhí)行相同操作砾医,將其命名為helloLabel。

    查看Xcode生成的代碼衣厘,您會(huì)看到它們都標(biāo)記有@IBOutlet如蚜。 這是Interface Builder Outlet的縮寫,是您告訴情節(jié)提要編輯器這些對(duì)象名稱可用于鏈接到可視對(duì)象的方式影暴。

    對(duì)于按鈕错邦,代碼不需要為其命名,但是需要知道用戶何時(shí)單擊按鈕型宙。 這要求使用@IBAction而不是@IBOutlet撬呢。

    選擇按鈕,然后像以前一樣按住Control鍵并拖動(dòng)到ViewController.swift中妆兑。 這次魂拦,將Connection(連接)彈出窗口更改為Action(動(dòng)作)毛仪,并將名稱設(shè)置為sayButtonClicked。 這將創(chuàng)建單擊按鈕時(shí)將調(diào)用的函數(shù)芯勘。


    現(xiàn)在一切就緒箱靴,可以編輯代碼。 使用右上角的X關(guān)閉助手編輯器借尿,然后切換到ViewController.swift刨晴。 如果您隱藏了導(dǎo)航器,請(qǐng)單擊右上角的切換按鈕路翻,或按Command-1直接跳至“項(xiàng)目導(dǎo)航器”狈癞。

    在sayButtonClicked中輸入以下代碼:

    var name = nameField.stringValue

    if name.isEmpty {

    name = "World"

    }

    let greeting = "Hello \(name)!"

    helloLabel.stringValue = greeting

    現(xiàn)在,ViewController.swift中的完整代碼如下所示(刪除頂部的常用版權(quán)聲明后)茂契。 行號(hào)旁邊的圓點(diǎn)表示與情節(jié)提要中的界面的連接蝶桶。


    完整代碼

    生成并運(yùn)行該應(yīng)用程序。

    單擊不輸入任何內(nèi)容的“Say Hello”按鈕掉冶,您將看到“ Hello World真竖!”。 現(xiàn)在輸入您的姓名厌小,然后再次單擊按鈕以查看您自己的個(gè)人問(wèn)候恢共。

    調(diào)試

    有時(shí),我們程序員會(huì)犯錯(cuò)誤–難以置信璧亚,但相信我讨韭,它會(huì)發(fā)生。 而且癣蟋,當(dāng)需要這樣做時(shí)透硝,我們需要能夠調(diào)試我們的代碼。 Xcode允許我們?cè)谌魏吸c(diǎn)處停止代碼疯搅,并逐行逐步執(zhí)行濒生,檢查每個(gè)點(diǎn)處的變量值,以便我們可以發(fā)現(xiàn)錯(cuò)誤幔欧。

    轉(zhuǎn)到ViewController.swift中的sayButtonClicked罪治,然后單擊var name = line旁邊的行號(hào)。 將會(huì)出現(xiàn)一個(gè)藍(lán)色的矩形琐馆。 這是一個(gè)活動(dòng)的斷點(diǎn)规阀,當(dāng)您單擊按鈕時(shí),調(diào)試器將在此處停止瘦麸。 再次單擊它谁撼,它將變成淺藍(lán)色。 現(xiàn)在它是一個(gè)無(wú)效的斷點(diǎn),不會(huì)停止代碼并啟動(dòng)調(diào)試器厉碟。 要完全刪除斷點(diǎn)喊巍,請(qǐng)將其拖出行號(hào)裝訂線。


    添加斷點(diǎn)

    再次添加斷點(diǎn)并運(yùn)行應(yīng)用程序箍鼓。 單擊說(shuō)你好按鈕崭参。 Xcode將位于最前面,突出顯示代碼的斷點(diǎn)行款咖。 在“編輯器”面板的底部何暮,現(xiàn)在將有兩個(gè)新的部分:Variables(變量)和 Console(控制臺(tái))。 “變量”部分顯示了此函數(shù)中使用的變量以及 self-這里即視圖控制器铐殃,和sender(發(fā)送者)-這里即按鈕海洼。


    Variables和Console
    最后編輯于
    ?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
    • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市富腊,隨后出現(xiàn)的幾起案子坏逢,更是在濱河造成了極大的恐慌,老刑警劉巖赘被,帶你破解...
      沈念sama閱讀 217,406評(píng)論 6 503
    • 序言:濱河連續(xù)發(fā)生了三起死亡事件是整,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡民假,警方通過(guò)查閱死者的電腦和手機(jī)浮入,發(fā)現(xiàn)死者居然都...
      沈念sama閱讀 92,732評(píng)論 3 393
    • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)羊异,“玉大人舵盈,你說(shuō)我怎么就攤上這事∏蚧” “怎么了?”我有些...
      開(kāi)封第一講書人閱讀 163,711評(píng)論 0 353
    • 文/不壞的土叔 我叫張陵瓦糟,是天一觀的道長(zhǎng)筒愚。 經(jīng)常有香客問(wèn)我,道長(zhǎng)菩浙,這世上最難降的妖魔是什么巢掺? 我笑而不...
      開(kāi)封第一講書人閱讀 58,380評(píng)論 1 293
    • 正文 為了忘掉前任,我火速辦了婚禮劲蜻,結(jié)果婚禮上陆淀,老公的妹妹穿的比我還像新娘。我一直安慰自己先嬉,他們只是感情好轧苫,可當(dāng)我...
      茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
    • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著疫蔓,像睡著了一般含懊。 火紅的嫁衣襯著肌膚如雪身冬。 梳的紋絲不亂的頭發(fā)上,一...
      開(kāi)封第一講書人閱讀 51,301評(píng)論 1 301
    • 那天岔乔,我揣著相機(jī)與錄音酥筝,去河邊找鬼。 笑死雏门,一個(gè)胖子當(dāng)著我的面吹牛嘿歌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播茁影,決...
      沈念sama閱讀 40,145評(píng)論 3 418
    • 文/蒼蘭香墨 我猛地睜開(kāi)眼宙帝,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了呼胚?” 一聲冷哼從身側(cè)響起茄唐,我...
      開(kāi)封第一講書人閱讀 39,008評(píng)論 0 276
    • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蝇更,沒(méi)想到半個(gè)月后沪编,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
      沈念sama閱讀 45,443評(píng)論 1 314
    • 正文 獨(dú)居荒郊野嶺守林人離奇死亡年扩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
      茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
    • 正文 我和宋清朗相戀三年蚁廓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片厨幻。...
      茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
    • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡相嵌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出况脆,到底是詐尸還是另有隱情饭宾,我是刑警寧澤,帶...
      沈念sama閱讀 35,501評(píng)論 5 345
    • 正文 年R本政府宣布格了,位于F島的核電站看铆,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏盛末。R本人自食惡果不足惜弹惦,卻給世界環(huán)境...
      茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
    • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望悄但。 院中可真熱鬧棠隐,春花似錦、人聲如沸檐嚣。這莊子的主人今日做“春日...
      開(kāi)封第一講書人閱讀 31,731評(píng)論 0 22
    • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至报咳,卻和暖如春侠讯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背暑刃。 一陣腳步聲響...
      開(kāi)封第一講書人閱讀 32,865評(píng)論 1 269
    • 我被黑心中介騙來(lái)泰國(guó)打工厢漩, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人岩臣。 一個(gè)月前我還...
      沈念sama閱讀 47,899評(píng)論 2 370
    • 正文 我出身青樓溜嗜,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親架谎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子炸宵,可洞房花燭夜當(dāng)晚...
      茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

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