標籤:
在上一篇部落格“窺探Swift編程之在Playground上盡情的玩耍”中介紹了如何使用Playground來學習Swift語言。本篇部落格就使用Playground來窺探Swift語言。千裡之行始於足下,當然了,除非你是坐的高鐵或者飛機。還是那句話從基礎開始吧,本篇部落客要介紹一下Swift的基礎資料型別 (Elementary Data Type)。Swift中的資料類型可謂是百花齊放百家爭鳴,下面就來窺探一下Swift中的基礎資料型別 (Elementary Data Type)。
一、Swift中的變數和常量
1.關鍵字“let”
常量,顧名思義,常量的值是不可以被再次改變的,比如你給number賦一個初始值"swift",那麼number從你給它賦值的那一刻就代表著"swift"。就像你從生下來就是男的或者女的,你不能從一個真正的男的變成真正的女的,反過來也是不成立的。當然後天如果你去了趟泰國那就不算了,如果後天變性的,編譯器會報錯,說你這是人妖,是編譯不過去的。說著說著又跑偏了,言歸正傳,在Swift中使用let關鍵字來建立一個常量並賦初始值後,那麼該常量的值就不能被改變了,如果你在使用中嘗試著去改變它,那麼編譯器真的會報錯的。在OC和C++中可以用關鍵const來定義常量,而Swift中使用的是let。
下面的程式碼片段定義一個名為gender的常量,並且賦值為"我是男的",在Playground的右邊會緊接著出來gender的值,下面一句是嘗試著給gender賦值,說你要去泰國那啥~在Swift的世界裡是不允許你這麼做的,所以給你一個錯誤“Cannot assign to ‘let‘ value ‘gender‘”,就是不允許你給gender再次賦值,用一句通俗易懂的話就是,不允許你去泰國那啥。這就是Swift中的常量,一錘定音,一言既出,駟馬難追是let的風格。
2.關鍵字“var”
如果世界上什麼東西都是一成不變的,估計就生活不下去了對吧。不想當程式員的醫生不是好老闆,這些都是可以變得對吧,世界上一成不變的東西還是少的,大多數東西都在運動,都在變化,在Swift的世界裡也是如此,變數的用處比常量要多的多。比如你現在是程式員,明天也要當老闆,如果這東西是常量,那完了,就做一輩子程式員吧,但是在現實生活中是可以變得,下面就是使用關鍵字var來定義一個hopeMe變數,並且賦上“我是程式員”,你勵志要做老闆,有一天你做了老闆,然後就變成了下面那句代碼,這在Swift的世界中是可以的,所以編譯器是不會給error的。
3.關於資料類型的說明
細心的園友會注意到上面不管是定義常量或者變數怎麼沒給這些變數或者常量指定資料類型呢?難道Swift像JS或者PHP這些語言一樣是弱類型的?非也,並不是弱類型的,Swift可以自動推斷資料類型,上面定義的都是string類型。下面這個執行個體,定義了一個變數intNumber,並賦上初始值10,使用sizeofValue()函數來查看該變數所佔記憶體位元組數,使用sizeof()函數來查看相應的資料類型所需儲存空間。更好的方法是在鍵入該變數時查看提示的資料類型。
二、給變數顯式指定相應的資料類型
上面不管是聲明常量還是變數,都是有編譯器通過類型推斷來判斷資料的類型的,接下我們就要顯式的指定我們需要的資料類型。在Swift中資料類型可謂是豐富多彩呢。
1.顯式聲明不同位元組的整數類型,在Swift中允許你來指定資料存放區所需位元組數。當然Int64是在64位系統上使用才佔64個位元組呢。
2.舉一個簡單的生活中的例子:不同物種是不可能進行結合產生正常的後代的,如果你告訴編譯器馬+Lv=?編譯器會報個錯,說你這是非法的,會產生一個不正常的後代“ErrorMessage = Luo子”。不扯鹹蛋了,言歸正傳,在Swift中是不允許不同的資料類型進行隱式運算的。不同資料類型的數字是不允許進行算術運算的,即使同為整型,如果儲存所佔位元組數不同,在Swift中也是不允許對其進行算術運算的。Swift語言說的官方一些是型別安全的,不同類型的資料是不允許直接進行算術運算的,下面的執行個體很好說明了這個問題。
3.Swift對不同數制的也是有著很好的支援,為了可讀性,Swift中允許你對較大的數進行分隔如所示,0b表示二進位,0o表示8進位,0x表示十六進位。
三、Swift中的浮點型
1.其他程式設計語言中也是有浮點型的了,下面的Dmeo給出了不同類型的浮點型在記憶體中儲存時所需位元組數。在Swift中預設是Double類型。
2.下面的Demo中給出類浮點型的計算,Float類型的資料是不允許和Double類型的資料直接進行運算的,還是那句話:swift中是不允許進行隱式類型轉換的。
3.下面是浮點數的指數表示形式,如下所示
窺探Swift之基礎資料型別 (Elementary Data Type)