iOS開發(fā)人員的十大基本規(guī)則

序言

免責(zé)聲明:這份清單純粹來自我的大腦钞护。這是關(guān)于成為一名好的Swift開發(fā)者的感覺影暴。我有偏見舞痰。這是我在準(zhǔn)備課程和制作應(yīng)用程序時(shí)閱讀了Swift文檔和WWDC視頻后發(fā)現(xiàn)的邀窃。
1.縮進(jìn),不夠快捷。
我看到過很多開發(fā)人員編寫如下代碼锦积,

func neverDoThis()
{
  let fuglyCode = true
  if (fuglyCode == true)
  {
    print("This is atrocious")
  }
}

如果我看到上面的代碼類型芒帕,我真的很難判斷。我以為他/她從來沒有閱讀過API指南/文檔或任何人的Swift代碼丰介。我們來看看WWDC的蘋果工程師如何撰寫背蟆。


// How Swift engineers would write
func swiftyWay() {
  let isLegit = true
  if isLegit {
    print("This is fine")
  }
}

2.永不使用Try !, as !, String!除非%100確定
如果你一直在附近基矮,確保你了解它們之間的差異淆储,
as as! as?
try try! try?
Int Int! Int?

如果你不知道自己在做什么冠场,并且使用Xcode左側(cè)的那些家浇,你一定會(huì)看到“發(fā)現(xiàn)意外的零”消息。不要被動(dòng)碴裙。移動(dòng)你的屁股并理解他們的意思钢悲。特別是對于那些參加Udemy初級課程(包括我自己)的人点额,你需要弄清楚你自己的。
3.不要超過20行功能
我的朋友昨天要我回顧他的代碼莺琳。一個(gè)函數(shù)有50行还棱。它涵蓋了整個(gè)Xcode黑屏。我就像惭等,這個(gè)狗屎不會(huì)去任何地方珍手。我告訴他,“我不想讀你的代碼辞做,因?yàn)槟愕拇a很糟糕”琳要。我告訴他把它分解成碎片并模塊化。真相傷害秤茅,但他是我的朋友稚补,我需要真實(shí)而清楚。沒有廢話試圖取悅他框喳。
例如课幕,不要寫這樣的東西,盡管下面的內(nèi)容不太五垮。乍惊。。

image.png
把它分解成幾塊拼余。
image.png

4. UI主線程污桦,網(wǎng)絡(luò)后臺(tái)線程
多重威脅(由CPU完成的一組任務(wù))的概念令人望而生畏。我不怪你匙监。我沒有計(jì)算機(jī)工程背景凡橱,但我仍然不太了解。
5.不要使Swift文件超過200行
我第一次學(xué)習(xí)如何制作應(yīng)用程序時(shí)犯了這個(gè)錯(cuò)誤亭姥。我制作了一個(gè)包含多個(gè)UIViewController類和模型的超過800行的文件稼钩。這是我不會(huì)重復(fù)的。一旦你入侵达罗,你永遠(yuǎn)不會(huì)回去坝撑。當(dāng)然,如果文件是JSON或基于內(nèi)容的文件粮揉,它可能包含數(shù)以千計(jì)的行巡李。

我不會(huì)詳細(xì)解釋所有這些概念,但我會(huì)告訴你扶认,你可以學(xué)習(xí)什么侨拦,并使你的整個(gè)應(yīng)用程序更加干凈。

有幾個(gè)方法可以從根本上減少行數(shù)并仍然可讀辐宾。您可以使用UITableVIew和UICollectionView使用面向協(xié)議的編程來制作可重用的代碼狱从。如果您使用的是代表Massive View Controller的MVC膨蛮,則可能需要了解MVVM的工作原理。

6.永遠(yuǎn)不要輸入任何東西季研。
你是否意識(shí)到我們可以在Xcode中自動(dòng)完成許多屬性的原因是由于Enums
敞葛?這看起來很明顯,但對初學(xué)者來說可能并非如此与涡。

你想在編程中做的最后一件事是硬核打字惹谐,而不是挑選。例如驼卖,當(dāng)您創(chuàng)建UIAlertViewStyle時(shí)豺鼻,UIKit工程師創(chuàng)建,

public enum UIAlertViewStyle : Int {
 case `default`
 case secureTextInput
 case plainTextInput
 case loginAndPasswordInput
}

你能想象打字每個(gè)案件嗎款慨?我不能儒飒,因?yàn)槲也豢紤]它,因?yàn)檫@是必須的檩奠。不要為自己編寫硬編碼桩了,而是為了你隊(duì)友的灰白頭發(fā)。

7.姓名埠戳。具有描述性井誉。造型指南
根據(jù)Swift API指南,開發(fā)人員應(yīng)該遵循一些標(biāo)準(zhǔn)整胃。

  • 公約>獨(dú)特性
    每種編程語言都有自己的特點(diǎn)和風(fēng)格颗圣。雖然是主觀的,但是可以通過閱讀在開源項(xiàng)目中編寫的Swift文檔和Swift文件來找到約定屁使。同樣在岂,我強(qiáng)烈建議你看看用Swifty的方式寫什么感覺。相反給你舉例蛮寂,我會(huì)在下面給你提供資源蔽午。

  • 表現(xiàn)力>令人印象深刻
    有些帥哥喜歡把東西扭曲,讓他們感到優(yōu)越感酬蹋,因?yàn)閯e人看不懂及老。這是廢話。沒有人應(yīng)該這樣做范抓。這完全是關(guān)于彼此之間的有效溝通骄恶。是的,代碼是人類與計(jì)算機(jī)交流的一種方式匕垫。但是僧鲁,它也在我們之間,開發(fā)者和極客之間。請不要成為那個(gè)試圖用莎士比亞的話來留下印象的傲慢家伙悔捶。沒必要。

  • 清晰度>簡潔
    Swift的開發(fā)者要求我們清楚地說出名字单芜,以便在三周后回來時(shí)蜕该,我們很好洗贰。但是芋肠,沒有黑色和白色。這是使用描述性名稱和減少總體行數(shù)的平衡逊谋。

“簡潔本身不是一個(gè)有價(jià)值的目標(biāo)扒腕。簡潔的代碼是使用上下文線索的結(jié)果“ -——Doug Gregor绢淀,Swift Engineer

// Too brief & Lack of context
let a = "A"
let b = "B"

如果我要閱讀上面的代碼,我會(huì)困惑到底是什么a和b始終瘾腰。所以皆的,我必須一直找到它們。為什么我們不能通過寫作來更具描述性蹋盆,

// How I would do it
let capLetterA = "A"
let capLetterB = "B"

8.使用Guard Guard語句不僅可用于展開optioanls费薄,還可用于替換if-else語句,并使用break或using return提前退出函數(shù)栖雾。它允許任何人識(shí)別如果在沒有滾動(dòng)查找其他塊的情況下沒有滿足條件會(huì)發(fā)生什么楞抡。
我們來看一個(gè)的例子。

let name = "Bobby"
func checkName() {
  // Early Check
  guard name == "Bob" else {
  print("You ain't Bob")
  return
 }

 // I can do anything I want without seeing the else block.
 // So much freedom
 // You don't even need to read this
 // Why are you even reading this
 // Now, you may leave. I'm not going to say anything important
 // In this block of code

 // Lol... you still here?

 print("You Good, bro")
}

如果您不明白打開option和提前退出意味著什么析藕,請檢查下面的資源召廷。
9.如果可以的話,不要使用NS
我沒有在Objective C中編寫代碼账胧,所以我盡量避免它在精神上和身體上都能達(dá)到竞慢。除非你正在與Objective-C API交互,否則即使Swift自動(dòng)將一些Objective-C類型轉(zhuǎn)換為Swift類型治泥,并將一些Swift類型轉(zhuǎn)換為Objective-C類型梗顺,也遠(yuǎn)離使用NS。

Swift的確受到Objective-C和其他許多語言的啟發(fā)车摄,但它是一門獨(dú)立的語言寺谤。我不確定轉(zhuǎn)換速度有多慢,但建議Swift開發(fā)人員盡可能避免吮播。由于Swift提供了自己的本地庫和API变屁,因此您可以查看替代方案。
image.png

“歷史筆記:如果你想知道為什么你遇到的很多類都有NS前綴意狠,那是因?yàn)榭煽珊虲ocoa Touch的歷史粟关。可可開始使用收集的框架來構(gòu)建NeXTStep操作系統(tǒng)的應(yīng)用程序环戈。當(dāng)蘋果在1996年購買NeXT時(shí)闷板,大部分NeXTStep都被納入到OS X中澎灸,包括現(xiàn)有的類名稱。 Cocoa Touch作為Cocoa的iOS平臺(tái)引入; Cocoa和Cocoa Touch都提供了一些類遮晚,盡管每個(gè)平臺(tái)都有很多獨(dú)特的類性昭。像NS和UI這樣的雙字母前綴(用于iOS上的用戶界面元素)保留給Apple使用“。 ——Apple

10.不要依賴分段 當(dāng)故事板看起來像蜘蛛網(wǎng)時(shí)县遣,初學(xué)者往往會(huì)制造太多的Segues糜颠。一旦超出了某個(gè)閾值,它就變得難以管理萧求,很難跟蹤每個(gè)視圖控制器其兴。因此,使用Delegate / NSNotification發(fā)送數(shù)據(jù)夸政。使用多個(gè)故事板而不是一個(gè)元旬。如果您對Delegate感到滿意,則可以開始使用RxSwift或ReactiveCocoa傳遞數(shù)據(jù)或僅通過幾行代碼發(fā)送通知守问。

最后

有一句話叫做三人行必有我?guī)煼啵鋵?shí)做為一個(gè)開發(fā)者,有一個(gè)學(xué)習(xí)的氛圍跟一個(gè)交流圈子特別重要酪碘。這是我的iOS技術(shù)交流群551346706,歡迎加入一起交流共同進(jìn)步 朋譬,小編也可以分享iOS面經(jīng)考點(diǎn)的答案給你

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市兴垦,隨后出現(xiàn)的幾起案子徙赢,更是在濱河造成了極大的恐慌,老刑警劉巖探越,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件狡赐,死亡現(xiàn)場離奇詭異,居然都是意外死亡钦幔,警方通過查閱死者的電腦和手機(jī)枕屉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鲤氢,“玉大人搀擂,你說我怎么就攤上這事【碛瘢” “怎么了哨颂?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長相种。 經(jīng)常有香客問我威恼,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任箫措,我火速辦了婚禮腹备,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘斤蔓。我一直安慰自己植酥,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布附迷。 她就那樣靜靜地躺著,像睡著了一般哎媚。 火紅的嫁衣襯著肌膚如雪喇伯。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天拨与,我揣著相機(jī)與錄音稻据,去河邊找鬼。 笑死买喧,一個(gè)胖子當(dāng)著我的面吹牛捻悯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播淤毛,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼今缚,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了低淡?” 一聲冷哼從身側(cè)響起姓言,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蔗蹋,沒想到半個(gè)月后何荚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡猪杭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年餐塘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片皂吮。...
    茶點(diǎn)故事閱讀 38,654評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡戒傻,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蜂筹,到底是詐尸還是另有隱情稠鼻,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布狂票,位于F島的核電站候齿,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜慌盯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一周霉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧亚皂,春花似錦俱箱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至禁漓,卻和暖如春跟衅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背播歼。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工伶跷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人秘狞。 一個(gè)月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓叭莫,卻偏偏與公主長得像,于是被迫代替她去往敵國和親烁试。 傳聞我的和親對象是個(gè)殘疾皇子雇初,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評論 2 349

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

  • 1.縮進(jìn),不夠快捷。 我看到過很多開發(fā)人員編寫如下代碼减响, funcneverDoThis(){letfuglyCo...
    暮年古稀ZC閱讀 955評論 0 0
  • 用到的組件 1抵皱、通過CocoaPods安裝 2、第三方類庫安裝 3辩蛋、第三方服務(wù) 友盟社會(huì)化分享組件 友盟用戶反饋 ...
    SunnyLeong閱讀 14,606評論 1 180
  • 因?yàn)椴弊由弦粋€(gè)長了十多年的肉疙瘩疼痛難忍悼院,要去縣里最好的醫(yī)院做檢查伤为。 因?yàn)檫@二個(gè)月, 你前后去大醫(yī)院做了兩次檢查据途,...
    陽光小青閱讀 407評論 4 4
  • 你看… 又是一年四季輪回 抽芽 綠葉 漸黃 黃葉 落葉歸根… 就這樣他經(jīng)歷了一年又一年 但今年的他格外不一樣 他比...
    疏微閱讀 235評論 2 2
  • 那些發(fā)生在08年的事情绞愚,像是褪色的舊電影,曾經(jīng)相片里清瘦的男孩和悲傷的女孩颖医,沒人記得他們什么時(shí)候走的位衩,也沒人會(huì)問,...
    燕小七閱讀 344評論 0 0