原文作者 : 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 name
和last 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 危害性。木馬病毒可以長期存在的主要因素是它可以隱匿自己,將自己偽裝成合法應用程式,使得使用者難以識別,這是木馬病毒的首要也是重要的特徵。與其它病毒一樣,這種隱蔽的期限往往是比較長的。經常採用的方法是寄生在合法程式之中 修改為合法程式名或圖示 不產生任何圖...