編譯時(shí)保證恭陡,減少崩潰和不一致的行為

編譯時(shí)保證-減少崩潰和不一致的行為
在運(yùn)行你的App之前揭绑,你能做的事情去保證更多的事情-在運(yùn)行時(shí)递鹉。首先你想編譯我們的app或者一段代碼傳輸它到代碼盟步,CPU或者一個(gè)事實(shí)上的設(shè)備能中斷和運(yùn)行,這是一個(gè)編譯階段躏结;下一個(gè)是鏈接却盘;它使用你剛剛編譯的代碼,用所有的框架和包和它相連進(jìn)入一個(gè)單一的app容器媳拴,或者僅僅一個(gè)二進(jìn)制黄橘,下一塊便是運(yùn)行。用戶能運(yùn)行我們的App屈溉。否則我們能在我們的手機(jī)或者電腦上運(yùn)行我們的App塞关,因此一切都是如此美好,盡管事實(shí)上我們得到了一個(gè)崩潰子巾,大量的時(shí)間內(nèi)我們不得而知跳纳。
App崩潰通常提供了一些瘋狂的不一致的行為。這是它崩潰的最終原因掏愁∷埽或者我們期望一些事,但是我們得到了另外的東西缠导,我們得到一個(gè)棧掃描廉羔,我們通過(guò)了崩潰報(bào)告,這不是最有希望的flow僻造,為什么會(huì)發(fā)生這些事呢憋他?它發(fā)生僅僅因?yàn)橐粋€(gè)簡(jiǎn)單的原因,因?yàn)槲覀兪侨祟愃柘鳎嬲慕鉀Q方案就是測(cè)試一切事情竹挡。我們通常測(cè)試,或者我們應(yīng)該測(cè)試立膛,我們應(yīng)該寫(xiě)測(cè)試永獵揪罕,這里有不同的測(cè)試類型,例如單元測(cè)試宝泵,簡(jiǎn)單的好啰,或者將你的App甩給用戶-beta測(cè)試。如果我們看一看測(cè)試的金字塔儿奶,我們確信這個(gè)家伙和這個(gè)表太相似了框往。證明這里事實(shí)上缺了一塊,或者闯捎,它是十分明顯的椰弊。它是編譯器。編譯器是在創(chuàng)建和運(yùn)行App時(shí)候是第一步瓤鼻,它是最好的一步秉版,或者你認(rèn)為它是最好的一步,因?yàn)樗峁┝烁嗟姆绞饺ケWC娱仔,它比單元測(cè)試保證的要多的多沐飘,它可能提供了更多保證-關(guān)于你的App在客戶端上如何運(yùn)行,最重要的是編譯器不是人類牲迫。它很聰明耐朴。
編譯器有很多特性,但是我們沒(méi)有盹憎,例如語(yǔ)法檢查或類型檢查筛峭,先進(jìn)的特性像控制流和語(yǔ)法分析,它們能提供保證陪每。通常影晓,它提供了二種方式去保證你的App如何運(yùn)行镰吵。第一個(gè)是編譯器錯(cuò)誤,它檢查你的App語(yǔ)法挂签,無(wú)論你用swift或者oc要講得通疤祭。另外一種方式就是它檢查你的真實(shí)意圖。如果你正在寫(xiě)一個(gè)函數(shù)饵婆,你正在調(diào)用那個(gè)函數(shù)勺馆,但是它被界定了,它闡述了一個(gè)編譯時(shí)錯(cuò)誤侨核,因此另外一塊便是編譯器警告草穆;這可能沒(méi)有錯(cuò)誤,以至于你的App仍然能編譯搓译。但是它們讓編譯器告訴你關(guān)于潛在的問(wèn)題悲柱,但是他或許不是最好的意圖。因此去容納這些的所有些己,并且在你的App內(nèi)使用它豌鸡。我們能做一些事例如趨向編譯器的開(kāi)發(fā)。
這真的不是一個(gè)事情轴总,但是它通常是規(guī)則的集合-你能寫(xiě)swift代碼去提供更多的保證-關(guān)于你的App在編譯時(shí)如何運(yùn)行直颅。因此第一個(gè)地方便是早早就失敗,或者經(jīng)常fail怀樟。扔異常和可選的是最好的朋友功偿,如果那里有一個(gè)微不足道的可能-這個(gè)事情或許做一些其他事情,或者周六有一個(gè)可能-這里在這個(gè)事件中可能有一個(gè)錯(cuò)誤往堡,使用ow去提供更多的上下文械荷,或者使用可選值去返回nil。另外一部分虑灰,事實(shí)上比趨于編譯器開(kāi)發(fā)耗費(fèi)更多吨瞎;但是這就是,從不相信輸出穆咐,如果我們關(guān)聯(lián)它到swift颤诀, 我們有一個(gè)明顯的強(qiáng)制解包或者可選值;第一個(gè)是十分糟糕的对湃;因?yàn)槟阍噲D去找借口確信崖叫,你的代碼從不返回nil,但是我們是人就不可能避免這樣的錯(cuò)誤拍柒;因此我們事實(shí)上應(yīng)該使用可選值心傀,而非顯式強(qiáng)制解包,因?yàn)槲覀儍H僅那樣使用拆讯,當(dāng)跑到那行代碼的時(shí)候脂男,如果返回nil則直接崩潰养叛;
另外一部分,我們真的喜歡保護(hù)一切事情宰翅,使用guard弃甥,if,switch和where去保證一切事情堕油,這樣就會(huì)得到更多的保證潘飘;我們能以這樣的方式去構(gòu)建我們的代碼,這樣我們能得到更多的保證掉缺;事實(shí)上這樣的例子很多,向常量和變量戈擒,如果你能使用常量去替代變量的話眶明,請(qǐng)那樣做;變量是十分糟糕的代碼筐高,因?yàn)槿绻罄m(xù)你更改了代碼搜囱,半年后你再看工程的時(shí)候,你試圖計(jì)算一些事柑土,它在這里不是最好的意圖蜀肘;它讓我們達(dá)到了另外的一個(gè)點(diǎn)-被明確,最明顯的方式就是和使用final一樣使用public 稽屏,private扮宠;
如果你不想讓你的類,再或者你寫(xiě)的,不是可擴(kuò)展的,這不是你打算寫(xiě)這篇文章的時(shí)候,使用最后一個(gè)。如果你不確定一個(gè)屬性,它應(yīng)該是公共或私人,是否使用私人因?yàn)槟阏娴牟恍枰褂盟啤W詈笠粋€(gè)在這個(gè)巨大的列表;預(yù)防/文檔坛增。我們總是想阻止不支持我們的代碼的行為,而不是記錄。第一個(gè)原因,我告訴你,因?yàn)槲覀兪侨祟?我們通常不會(huì)讀薄腻。這是所有偉大的收捣。它如何在實(shí)踐中應(yīng)用?我這里是一個(gè)小例子。我想讓一個(gè)類,這是一個(gè)請(qǐng)求,我想要初始化一個(gè)字符串,它表示我的URL以及我要使用一些網(wǎng)絡(luò)庫(kù)庵楷。因此,我需要使用一個(gè)NSURLRequest,或在這種情況下,一個(gè)NSMutableURLRequest,然后我要添加一些授權(quán),然后我要完成我的請(qǐng)求罢艾。
因?yàn)槲艺娴男枰业恼?qǐng)求的執(zhí)行功能,我會(huì)將其解壓縮到一個(gè)變量上。然后一些地方,實(shí)際上我要使用這個(gè)類尽纽。所以這一切看起來(lái)好可愛(ài),但實(shí)際上如果我改變URL從適當(dāng)?shù)囊?guī)范這樣的URL,以TM嗎?TM是重要的咐蚯。我會(huì)崩潰,通常發(fā)生的是,“嘿,我只是寫(xiě)了這可怕的代碼和它的工作原理,我可以推斷它”,“它與通用網(wǎng)址,我不知道發(fā)生了什么事”,所以你進(jìn)入這一模式。這里到底發(fā)生了什么,你可能已經(jīng)注意到,我用一個(gè)隱式打開(kāi)可選在這里,這是一個(gè)單個(gè)的字符蜓斧。和可選的讓我的代碼崩潰,所以現(xiàn)在我知道問(wèn)題仓蛆。因此,我可以安排。通常解決諸如隱式地打開(kāi)可選,以及保護(hù)我的代碼,從崩潰保護(hù)我的代碼,我可以使用一個(gè)將注釋在init函數(shù)挎春。實(shí)際上也迫使我重組我的代碼,所以我從錯(cuò)誤捕捉中獲益看疙。您也可以使用可選在這里,如果你沒(méi)有一個(gè)精確的錯(cuò)誤提供,并提供一些到底發(fā)生了什么,但是在這個(gè)例子中,我們可以看到如何通過(guò)構(gòu)建和添加幾行代碼,編譯器讓我們編寫(xiě)代碼的方式,我們可以更多的理由豆拨。另一個(gè)例子從同一段代碼。如果我們改變這個(gè)請(qǐng)求嗎?我們不會(huì)崩潰,但是我們不能原因在運(yùn)行時(shí)發(fā)生了什么能庆。它發(fā)生的原因是由于一個(gè)事實(shí):我們先寫(xiě)一個(gè)var,不是讓我們代碼表達(dá)不是我們的意圖施禾。所以讓var改變,相同的代碼會(huì)產(chǎn)生編譯錯(cuò)誤會(huì)告訴你,“嘿,這不是你的意圖。你是打算做別的東西,所以你不能突變那邊的請(qǐng)求搁胆∶指悖”
另一個(gè),另一種方法打破這種簡(jiǎn)單的變異中的URL請(qǐng)求。只使用一個(gè)不同的URL渠旁。我們不知道會(huì)發(fā)生什么在運(yùn)行時(shí)攀例。我們想要提供一種方法來(lái)保證這不會(huì)發(fā)生在編譯的時(shí)候,所以不要這樣做,我們會(huì)是我們班和使用這個(gè)類的分割成單獨(dú)的斯威夫特文件,標(biāo)注了我們的請(qǐng)求變量請(qǐng)求類和私有的。這是一個(gè)重要的發(fā)現(xiàn)這些分離成獨(dú)立的文件,因?yàn)樗饺俗⑨屖撬饺讼嗤脑次募?而不是同一個(gè)班」死埃現(xiàn)在我們把我們的代碼,我們提供了更多的意圖粤铭。我們上市,我們使用的是私有的,因此這將產(chǎn)生編譯錯(cuò)誤,我們有更多的保證運(yùn)行時(shí)編譯時(shí)。如果我們回到這些東西的列表,你可以看到如果你把斯威夫特注釋從他們所有人,他們可以是很模糊的東西杂靶。關(guān)于所有這些可怕的部分是,他們可以是任何你想要的梆惯。這里的重點(diǎn)是你應(yīng)該提供更多的保證和你應(yīng)該結(jié)構(gòu)代碼,你可以在編譯時(shí)提供更多的保障。否則,你會(huì)遇到的生產(chǎn)問(wèn)題吗垮。你會(huì)陷入崩潰在App Store導(dǎo)致一顆星評(píng)論,導(dǎo)致銷量不佳,導(dǎo)致所有不好的事情垛吗。但是如果我們使用一組這些事情,如果我們認(rèn)為之前我們寫(xiě)代碼或之后我們寫(xiě)代碼并運(yùn)行它第一次,我們回去清理一切——然后我們可以提供更多的編譯時(shí)保證。實(shí)際上比這更對(duì)這些擔(dān)保烁登。有分析儀警告怯屉。鏗鏘聲分析儀是驚人的。它可以檢查您的代碼以先進(jìn)的方式,可以給你流,你可能沒(méi)有想過(guò),這都是自動(dòng)的,不僅僅是超級(jí)容易xcodebuild測(cè)試,而且xcodebuild分析防泵。也有編譯器警告,重要的是抓住不要忽視警告蚀之。如果你有一個(gè)警告在您的項(xiàng)目,你有更少的擔(dān)保。我看到項(xiàng)目與成千上萬(wàn)的警告和他們真的很難推斷捷泞。但是如果你沒(méi)有警告,你使用的編譯器足删。你使用的分析器。
實(shí)是有很多沒(méi)有被記錄的叮當(dāng)聲的警告,他們都可以在fuckingclangwarnings.com锁右。舞臺(tái),是的,我發(fā)誓我不能發(fā)誓在幻燈片失受。網(wǎng)站有26 + 21 + 234警告上市,它們都是不同種類的東西,這是唯一的號(hào)碼。實(shí)際上有更多的警告只是不同類型相同的標(biāo)志咏瑟。但是使用他們所有人,說(shuō)在objective - c中,我們需要做的就是進(jìn)入我們的目標(biāo),改變構(gòu)建設(shè)置,找到其它的警告標(biāo)志,并添加Weverything拂到。這將給叮當(dāng)聲知道的任何警告,給我們。如果你是一個(gè)迂腐的人盡可能多的人,你可以用Wpedantic,實(shí)際上是存在的码泞。如果你使用這兩個(gè),你也可以禁用警告,如果你不認(rèn)為他們是必要的,只需添加# pragma叮當(dāng)聲診斷和流行,而忽略警告通過(guò)案件兄旬。瘋狂的一部分,這不是斯威夫特。這純粹是在objective - c預(yù)處理程序因?yàn)闆](méi)有迅速和蘋(píng)果并不想做一個(gè)。但是如果你使用它們只是在objective - c中,或者你讓所有的警告,它會(huì)給你更多的擔(dān)保權(quán)利领铐。這就是我悯森。
Q1:我只是想添加什么你只是談?wù)?Xcode的設(shè)置更改錯(cuò)誤警告,“將警告視為錯(cuò)誤”,所以這樣你真的不能編譯項(xiàng)目中如果你有警告。
Answer:難使用,因?yàn)橥ǔD憔帉?xiě)代碼的方式編譯然后清理,然后消除警告绪撵。但是你不想阻止你編譯時(shí)警告你只是在開(kāi)發(fā)過(guò)程中瓢姻。但是flag是有用的。
2:兩件事,一個(gè)是你可以把它添加到他剛剛發(fā)布的構(gòu)建,這是相當(dāng)不錯(cuò)的,然后你可以調(diào)試音诈。無(wú)論如何,關(guān)于那個(gè)感嘆號(hào)和問(wèn)號(hào)的問(wèn)題幻碱。所以當(dāng)我第一次開(kāi)始迅速,我是在同一條船上,問(wèn)號(hào)是可怕的,沒(méi)有使用它們。但是我已經(jīng)開(kāi)始改變我的想法是,“實(shí)際上,有時(shí)也許車禍比用戶的操作细溅∪彀“對(duì)吧?如果你是一個(gè)用戶和你只是觸及的東西,但是什么也沒(méi)有發(fā)生,這可能實(shí)際上比東西更混亂的崩潰。就像,現(xiàn)代bug報(bào)告,像說(shuō),Crashlytics什么的,可能捕獲,它可能會(huì)讓你發(fā)現(xiàn)錯(cuò)誤比如果它只是一個(gè)空操作更容易喇聊。所以我實(shí)際上,當(dāng)我現(xiàn)在開(kāi)發(fā),我來(lái)回喜歡,”崩潰實(shí)際上會(huì)在這種情況下比任何操作嗎?“我不知道,只是想如果你有任何見(jiàn)解,或你的想法是什么摔桦。
answer:你做一個(gè)很好的點(diǎn),事實(shí)并非如此,但開(kāi)始迅速2,我們?nèi)咏o我們一種我們的代碼結(jié)構(gòu)。如果是零,然后把我們可以保護(hù)聲明承疲。所以我們可以為最終用戶提供錯(cuò)誤。因?yàn)橛脩艋ㄙM(fèi)的時(shí)間重新啟動(dòng)應(yīng)用程序或如果他們甚至想崩潰后重啟應(yīng)用程序?qū)嶋H上是一個(gè)很多鸥咖。如果你能給他們一個(gè)錯(cuò)誤,“嘿,我只是點(diǎn)擊URL和有一個(gè)意想不到的錯(cuò)誤,我不知道發(fā)生了什么,”這可能是一個(gè)更好的選擇,因?yàn)樗麄兛赡軙?huì)采取一些不同的措施燕鸽。不一樣的行動(dòng),因?yàn)樗麄兊哪康摹K匀绻闶褂每蛇x的組合,不隱式地打開(kāi)可選的只是可選的,和保護(hù)每一個(gè)可選的聲明,您希望非nil,但是你想要扔,這是一個(gè)更好的代碼,只是撞你的應(yīng)用啼辣。
3啊研,偉大的說(shuō)話,這真是一個(gè)偉大的討論,一個(gè)追隨捎帶托尼剛才說(shuō)的是,你也可以使用斷言來(lái)保證對(duì)您的代碼不變性。這不是編譯時(shí),但至少這是鸥拧。得到快速的反饋,early-fail經(jīng)常失敗,被顯式隱式党远。你也可以在發(fā)布模式下做事情,你可以有一個(gè)客戶斷言處理程序,而不是崩潰你的應(yīng)用,拋出一個(gè)警報(bào),允許用戶報(bào)告錯(cuò)誤。其實(shí)東西Spotify應(yīng)用程序在調(diào)試模式,我也認(rèn)為對(duì)于開(kāi)發(fā)人員在發(fā)布模式下富弦。但我想問(wèn)尼基塔的一個(gè)問(wèn)題是,當(dāng)你有更多這樣的編譯時(shí)合同和擔(dān)保,以你的經(jīng)驗(yàn),如何影響你編寫(xiě)單元測(cè)試的方式,和你看的東西當(dāng)你發(fā)現(xiàn)候選單元測(cè)試和做風(fēng)險(xiǎn)分析?
answer:你會(huì)寫(xiě)更少的測(cè)試沟娱。這是非常真實(shí)的。甚至在objective - c中,只需將nullability注釋添加到您的標(biāo)題,您不需要編寫(xiě)測(cè)試代碼打破或讓它把讓它做什么,它可以斷言的東西和你想要驗(yàn)證這些斷言腕柜。你想確保你的代碼不做一些瘋狂的事情,當(dāng)你通過(guò)NIL济似。實(shí)際上如果代碼拋出和保安的事情,您可以測(cè)試更少的事情。
4盏缤,嗨砰蠢。謝謝你的談話。一件事一個(gè)團(tuán)隊(duì)我在處理,如何處理零傳播和可選的傳播唉铜。你顯示的示例中,你總是試圖保護(hù)它早期嗎?因?yàn)?否則,你最后做一個(gè)objective - c風(fēng)格的事情,你經(jīng)常檢查NIL一路堆棧,例如台舱。所以,你是保護(hù)非常嚴(yán)格,防止隨意傳播,是個(gè)問(wèn)題。
answer:它實(shí)際上取決于潭流。所以在與請(qǐng)求的例子中,如果你返回可選零,有很多原因可以零或者我們無(wú)法分配——可以是零?可能不是在斯威夫特,但一般來(lái)說(shuō),是的竞惋。如果我們添加更多屬性相同的初始化,我們可以返回NIL在兩個(gè)場(chǎng)景柜去。扔在零傳播進(jìn)一步的好處是,它給你一個(gè)明確的能力告訴發(fā)生了什么。因此,在本例中,您可以看出,“嘿,我的URL字符串是畸形的,我不能構(gòu)建一個(gè)請(qǐng)求字符串碰声」铗眩”
-摘自https://www.skilled.io/u/nikitalutsenko/compile-time-guaranteed

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市胰挑,隨后出現(xiàn)的幾起案子蔓罚,更是在濱河造成了極大的恐慌,老刑警劉巖瞻颂,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件豺谈,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡贡这,警方通過(guò)查閱死者的電腦和手機(jī)茬末,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)盖矫,“玉大人丽惭,你說(shuō)我怎么就攤上這事”菜” “怎么了责掏?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)湃望。 經(jīng)常有香客問(wèn)我换衬,道長(zhǎng),這世上最難降的妖魔是什么证芭? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任瞳浦,我火速辦了婚禮,結(jié)果婚禮上废士,老公的妹妹穿的比我還像新娘叫潦。我一直安慰自己,他們只是感情好湃密,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布诅挑。 她就那樣靜靜地躺著,像睡著了一般泛源。 火紅的嫁衣襯著肌膚如雪拔妥。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,688評(píng)論 1 305
  • 那天达箍,我揣著相機(jī)與錄音没龙,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛硬纤,可吹牛的內(nèi)容都是我干的解滓。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼筝家,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼洼裤!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起溪王,我...
    開(kāi)封第一講書(shū)人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤腮鞍,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后莹菱,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體移国,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年道伟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了迹缀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蜜徽,死狀恐怖祝懂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拘鞋,我是刑警寧澤嫂易,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站掐禁,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏颅和。R本人自食惡果不足惜傅事,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望峡扩。 院中可真熱鬧蹭越,春花似錦、人聲如沸教届。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)案训。三九已至买置,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間强霎,已是汗流浹背忿项。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人轩触。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓寞酿,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親脱柱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子伐弹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

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

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)榨为,斷路器惨好,智...
    卡卡羅2017閱讀 134,661評(píng)論 18 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,167評(píng)論 25 707
  • 因?yàn)橐Y(jié)局swift3.0中引用snapKit的問(wèn)題,看到一篇介紹Xcode8,swift3變化的文章,覺(jué)得很詳細(xì)...
    uniapp閱讀 4,416評(píng)論 0 12
  • 因?yàn)橐龅氖虑楹芏啵鴷r(shí)間還是那些時(shí)間柠逞,所以昧狮,干脆什么也不干,躺在沙發(fā)上玩手機(jī)逛淘寶板壮,哈哈哈逗鸣。 選擇讓2017年的...
    小萌_m閱讀 257評(píng)論 0 0
  • 藝術(shù)培訓(xùn)機(jī)構(gòu)越來(lái)越多,鋼琴培訓(xùn)绰精、舞蹈培訓(xùn)撒璧、美術(shù)培訓(xùn).......,不一而足笨使,數(shù)不勝數(shù)卿樱。本文主要針對(duì)鋼琴一對(duì)一培訓(xùn)展...
    時(shí)間寶閱讀 667評(píng)論 0 0