WWDC 2016 更加安全的 Swift 3 0

2021-09-19 04:57:28 字數 2502 閱讀 3288

原文作者 : matt mathias

譯文出自 : 掘金翻譯計畫

譯者 : zheaoli

校對者: llp0574, thanksdanny

swift發布之後,swift的開發者一直在強調,安全性與可選擇型別是swift最為重要的特性之一。他們提供了一種'nil'的表示機制,並要求有乙個明確的語法在可能為'nil'的例項上使用。

可選擇型別主要以下兩種:

optional

下面將展示乙個關於這個問題的例子:

let x: int! = nil

print(x) // crash! `x` is nil!

讓我們來通過乙個例子來理解這裡面的變化。

struct person 

self.firstname = firstname

self.lastname = lastname

}}

這裡我們建立了乙個初始化方法有缺陷的結構體person。如果我們在初始化中不給例項提供first namelast name的值的話,那麼初始化將會失敗。

比如,在swift 2.x裡,下面這段**在執行時將崩潰。

// swift 2.x

let nilperson = person(firstname: "", lastname: "mathias")

nilperson.firstname // crash!

請注意,由於在初始化器中存在著隱式解包,因此我們沒有必要使用型別繫結(譯者注1:optional binding)或者是自判斷鏈結(譯者注2:optional chaining)來保證nilperson能被正常的使用。

// swift 3.0

let nilperson = person(firstname: "", lastname: "mathias")

nilperson?.firstname

在上面這個示例中,nilperson是乙個optional型別的例項。這意味著如果你想正常的訪問裡面的值,你需要對nilperson進行拆包處理。這種情況下,手動拆包是個非常好的選擇。

答案是安全性與宣告之間的依賴關係。在上面這段**裡(let nilperson = person(firstname: "", lastname: "mathias"))將依靠編譯器對nilperson的型別進行推斷。

這種做法很巧妙的一點在於限制了隱式解包的optional例項的傳遞。參考下我們前面關於person的**,同時思考下我們之前在swift 2.x裡的一些做法:

// swift 2.x

let matt = person(firstname: "matt", lastname: "mathias")

比如,在上面的**中,我們如果進行了一些非同步操作,情況會怎麼樣呢?

// swift 2.x

let matt = person(firstname: "matt", lastname: "mathias")

讓我們在swift 3.0中試試同樣的**會怎樣。

// swift 3.0

let matt = person(firstname: "matt", lastname: "mathias")

matt?.firstname // `matt` is `optional`

let anothermatt = matt // `anothermatt` is also `optional`

在這個變化中,最大的好處在於編譯器的型別推斷不會使我們**的安全性降低。如果在必要的情況下,我們選擇的一些不太安全的方式,我們必須進行顯示的宣告。這樣編譯器不會再進行自動的判斷。

// swift 3.0

let runningwithscissors: person! = person(firstname: "edward", lastname: "") // must explicitly declare person!

let safeagain = runningwithscissors // what's the type here?

runningwithscissors是乙個值為nil的例項,因為我們在初始化的時候,我們給lastname了乙個空字串。

更加安全的金鑰生成方法Diffie Hellman

更加安全的金鑰生成方法diffie hellman 之前我們談到了金鑰配送的問題,這個世界是如此的危險,一不小心通訊線路就會被監聽,那麼我們怎麼在這種不安全的線路中傳遞金鑰呢?這裡我們介紹一下diffie hellman金鑰交換演算法。這個演算法是由whitfield diffie和martin h...

雲計算如何讓您的企業更加安全?

雖然許多人仍然認為雲的安全性較低,但現實情況是,由於雲計算,您的資料現在更加安全 而且雲已經改變了所有型別系統的安全遊戲。我們在雲中擁有接近 20 的企業工作負載,儘管在三年前就有這樣的使用者側這種 甚至僅僅在三年前。其中乙個重大擔憂是安全問題。但是,您的資訊在雲中實際上比在您自己的資料中心中更安全...

木馬病毒的特性,使得網路安全更加困難,難以根治!

特徵 1 隱蔽性。2 欺騙性。3 頑固性。4 危害性。木馬病毒可以長期存在的主要因素是它可以隱匿自己,將自己偽裝成合法應用程式,使得使用者難以識別,這是木馬病毒的首要也是重要的特徵。與其它病毒一樣,這種隱蔽的期限往往是比較長的。經常採用的方法是寄生在合法程式之中 修改為合法程式名或圖示 不產生任何圖...