Swift 語言面面觀(一)

2021-09-19 04:44:38 字數 2281 閱讀 8504

原文作者 : kristian andersen

譯文出自 : 掘金翻譯計畫

譯者 : 達仔

校對者: nicolas(yifei) li、jack king

在 wwdc 2014(蘋果 2014 年開發者大會)發布的 swift 程式語言,大約在一周內將迎來它的兩周歲生日(譯註:wwdc 2014 的時間是 2014-6-3)。當時聽到這個訊息,我們在工作室裡興奮地跳了起來,並從此投入到了 swift 的懷抱。然而兩年時間過去了,我依然在苦苦思索著怎樣寫出好的 swift **。要知道 objective-c 已經快有三十年歷史了,我們都已經摸索出 objective-c 的最佳實踐,以及什麼是好或壞的 objective-c **,然而 swift 還很年輕。

讓我們進入正題。

我早已無法數清我有多少次犯下了同一種錯誤:花費大量時間在尋找字串拼寫錯誤導致的各種各樣的古怪 bug。列舉型別除了可以幫你節省除錯時間外,還可以減少字元輸入的時間,因為 xcode 的**補全功能會推薦定義好的列舉值。

在使用 nsurlsession 的每個專案裡,我都包含了下面的**片段:

enum httpmethod: string
這是乙個非常簡單的列舉,我知道大部分的開發者可能都不屑於這麼做。然而基於上述原因,我確實是這麼使用的。

更新:tobias due munk 指出,你甚至不需要把和鍵名相同的值字串寫出來,swift 有更簡化的語法。你只需要這樣寫:

enum httpmethod: string
在寫 swift **的過程中,我總是遵循「最嚴格的」原則,在一開始盡可能先把所有類、結構、列舉以及函式設成私有。如果之後我發現需要乙個函式暴露在類外,我才會嘗試降低這個限制。通過遵循這一原則,我可以實現最小化 api 「表面積」,方便其他開發者呼叫。

自從 swift 出現以後,我就一直在**邏輯中完全實現 view 和 view controller。作為曾經的 storyboard 重度使用者的我,現在發現把所有的屬於檢視的**放在乙個地方,比起分開放在 xml 檔案和幾行邏輯**更加實用。

在編寫了大量 view 和 view controller **之後,我遇到了乙個難題。因為我更喜歡 auto layout,所以我偏向於不使用引數初始化檢視(init:frame 是指定構造器)。如果你在 swift 中,對於任何的 uikit 類指定乙個無引數的建構函式,你就不得不指定乙個 init:coder 構造器。這很煩人,為了避免每次建立檢視都寫這段模板**,我建立了乙個 「泛型檢視類(generic view class)」 ,讓所有檢視繼承這個類而無需繼承 uiview。

public class genericview: uiview 

public required init?(coder: nscoder)

internal func configureview() {}

}

這個類同時也表達出我的另乙個程式設計習慣:建立乙個 「configureview」 方法,把所有配置檢視的操作,包括新增子檢視、約束、調整顏色、字型等,全都放到這個方法中。這樣的話,無論什麼時候建立檢視,我都不需要再寫一遍上述的模板**了。

class awesomeview: genericview 

}let awesomeview = awesomeview()

當你把這個模式配合泛型 view controller 一起使用,效果更佳。

public class genericviewcontroller: uiviewcontroller 

public init()

public required init?(coder: nscoder)

super.init(coder: coder)

}public override func loadview()

}

現在要給檢視建立 view controller 更加簡單了。

class awesomeviewcontroller: genericviewcontroller

}

我把這個模式的**抽離出來,放到了乙個 github repo 中。這套**可以配合 carthage 或者 cocoapods 作為一套框架使用。

我同意這 4 個基類幾乎沒實現什麼功能,也稱不上一套框架。之所以發布這套**,是因為我覺得對於大部分人來說,這種用法是最容易上手的方式。我覺得你完全可以把這幾個類複製貼上到你的**當中,我預計不會對這套**作出很大修改了。

Windows 系統面面觀

微軟出於種種目的,只是把一些不常用的工具藏在windows 的各個角落,這些僅作為附屬工具,無法弄清其具體鏈結檔案,不利於直接呼叫。下面我們就對它一一進行介紹。一 目錄篇 aspicd.sys scsi光碟機的的aspi驅動程式。必須先執行aspi dos驅動程式,這個檔案只對於那些使用scsi的使...

架構視角面面觀

是否在不斷的學習新技術 新名詞 生怕落伍?wcf wf wpf mvc ef webapi spring castle unity autofac ninject aop等 ui層 平均是多少行?webform頁面 winform等頁面 業務層 量平均是多少?資料訪問層 量平均是多少?儲存過程 sq...

IT界人才面面觀

人才是企業的生命線,乙個企業最重要的資源可以說就是人才了,特別在it行業,人才更是重中之重。it是informationgtechonlogy的簡寫,就是資訊科技,是一切製造 傳輸 加工 儲存和使用資訊的技術。it企業在近幾年有了長足的發展,但it人才卻和it企業的發展不相適應。it人才市場 200...