Swift 數據類型 2022-08-01

Swift 數據類型

在我們使用任何程序語言編程時苛骨,需要使用各種數據類型來存儲不同的信息谷饿。

變量的數據類型決定了如何將代表這些值的位存儲到計算機的內存中逆甜。在聲明變量時也可指定它的數據類型傅联。

所有變量都具有數據類型秸苗,以決定能夠存儲哪種數據撒妈。

內置數據類型

Swift 提供了非常豐富的數據類型恢暖,以下列出了常用了幾種數據類型:

Int

一般來說,你不需要專門指定整數的長度狰右。Swift 提供了一個特殊的整數類型Int杰捂,長度與當前平臺的原生字長相同:

在32位平臺上,Int和Int32長度相同棋蚌。

在64位平臺上嫁佳,Int和Int64長度相同。

除非你需要特定長度的整數谷暮,一般來說使用Int就夠了蒿往。這可以提高代碼一致性和可復用性。即使是在32位平臺上湿弦,Int可以存儲的整數范圍也可以達到-2,147,483,648~2,147,483,647瓤漏,大多數時候這已經足夠大了。

UInt

Swift 也提供了一個特殊的無符號類型UInt,長度與當前平臺的原生字長相同:

在32位平臺上蔬充,UInt和UInt32長度相同蝶俱。

在64位平臺上,UInt和UInt64長度相同饥漫。

注意:?盡量不要使用UInt榨呆,除非你真的需要存儲一個和當前平臺原生字長相同的無符號整數。除了這種情況庸队,最好使用Int积蜻,即使你要存儲的值已知是非負的。統(tǒng)一使用Int可以提高代碼的可復用性彻消,避免不同類型數字之間的轉換竿拆,并且匹配數字的類型推斷。

整數類型需要注意以下幾點:

在 32 位系統(tǒng)上, Int 和 Int32 長度相同证膨。

在 64 位系統(tǒng)上, Int 和 Int64 長度相同如输。

在 32 位系統(tǒng)上, UInt 和 UInt32 長度相同鼓黔。

在 64 位系統(tǒng)上, UInt 和 UInt64 長度相同央勒。

Int8, Int16, Int32, Int64 分別表示 8 位, 16 位, 32 位, 和 64 位的有符號整數形式。

UInt8, UInt16, UInt32, UInt64 分別表示 8 位, 16 位, 32 位 和 64 位的無符號整數形式澳化。

浮點數:Float崔步、Double

浮點數是有小數部分的數字,比如?3.14159缎谷,0.1?和?-273.15井濒。

浮點類型比整數類型表示的范圍更大,可以存儲比?Int?類型更大或者更小的數字列林。Swift 提供了兩種有符號浮點數類型:

Double?表示64位浮點數瑞你。當你需要存儲很大或者很高精度的浮點數時請使用此類型。

Float?表示32位浮點數希痴。精度要求不高的話可以使用此類型者甲。

注意:

Double精確度很高,至少有15位數字砌创,而?Float?最少只有6位數字虏缸。選擇哪個類型取決于你的代碼需要處理的值的范圍。

布爾值:Bool

Swift 有一個基本的布爾(Boolean)類型嫩实,叫做 Bool刽辙。布爾值指邏輯上的值,因為它們只能是真或者假甲献。Swift 有兩個布爾常量宰缤,true 和 false。

字符串:String

字符串是字符的序列集合,例如:

"Hello, World!"

字符:Character

字符指的是單個字母撵溃,例如:

"C"

可選類型:Optional

使用可選類型來處理值可能缺失的情況疚鲤。可選類型表示有值或沒有值缘挑。

數值范圍

下表顯示了不同變量類型內存的存儲空間集歇,及變量類型的最大最小值:

類型大小(字節(jié))區(qū)間值

Int81 字節(jié)-128 到 127

UInt81 字節(jié)0 到 255

Int324 字節(jié)-2147483648 到 2147483647

UInt324 字節(jié)0 到 4294967295

Int648 字節(jié)-9223372036854775808 到 9223372036854775807

UInt648 字節(jié)0 到 18446744073709551615

Float4 字節(jié)1.2E-38 到 3.4E+38 (~6 digits)

Double8 字節(jié)2.3E-308 到 1.7E+308 (~15 digits)

類型別名

類型別名對當前的類型定義了另一個名字语淘,類型別名通過使用 typealias 關鍵字來定義诲宇。語法格式如下:

typealias newname = type

例如以下定義了 Int 的類型別名為 Feet:

typealias Feet = Int

現在,我們可以通過別名來定義變量:

import Cocoatypealias Feet = Intvar distance: Feet = 100print(distance)

我們使用 playground 執(zhí)行以上程序惶翻,輸出結果為:

100

類型安全

Swift 是一個類型安全(type safe)的語言姑蓝。

由于 Swift 是類型安全的,所以它會在編譯你的代碼時進行類型檢查(type checks)吕粗,并把不匹配的類型標記為錯誤纺荧。這可以讓你在開發(fā)的時候盡早發(fā)現并修復錯誤。

import Cocoavar varA = 42varA = "This is hello"print(varA)

以上程序颅筋,會在 Xcode 中報錯:

error: cannot assign value of type 'String' to type 'Int'varA = "This is hello"

意思為不能將 'String' 字符串賦值給 'Int' 變量宙暇。

類型推斷

當你要處理不同類型的值時,類型檢查可以幫你避免錯誤议泵。然而占贫,這并不是說你每次聲明常量和變量的時候都需要顯式指定類型。

如果你沒有顯式指定類型先口,Swift 會使用類型推斷(type inference)來選擇合適的類型型奥。

例如,如果你給一個新常量賦值42并且沒有標明類型碉京,Swift 可以推斷出常量類型是Int厢汹,因為你給它賦的初始值看起來像一個整數:

let meaningOfLife = 42// meaningOfLife 會被推測為 Int 類型

同理,如果你沒有給浮點字面量標明類型谐宙,Swift 會推斷你想要的是Double:

let pi = 3.14159// pi 會被推測為 Double 類型

當推斷浮點數的類型時烫葬,Swift 總是會選擇Double而不是Float。

如果表達式中同時出現了整數和浮點數卧惜,會被推斷為Double類型:

let anotherPi = 3 + 0.14159// anotherPi 會被推測為 Double 類型

原始值3沒有顯式聲明類型厘灼,而表達式中出現了一個浮點字面量,所以表達式會被推斷為Double類型咽瓷。

實例

import Cocoa// varA 會被推測為 Int 類型 var varA = 42print(varA)// varB 會被推測為 Double 類型? var varB = 3.14159print(varB)// varC 也會被推測為 Double 類型? var varC = 3 + 0.14159print(varC)

執(zhí)行以上代碼设凹,輸出結果為:

423.141593.14159

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市茅姜,隨后出現的幾起案子闪朱,更是在濱河造成了極大的恐慌月匣,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奋姿,死亡現場離奇詭異锄开,居然都是意外死亡,警方通過查閱死者的電腦和手機称诗,發(fā)現死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門萍悴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人寓免,你說我怎么就攤上這事癣诱。” “怎么了袜香?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵撕予,是天一觀的道長。 經常有香客問我蜈首,道長实抡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任欢策,我火速辦了婚禮吆寨,結果婚禮上,老公的妹妹穿的比我還像新娘猬腰。我一直安慰自己鸟废,他們只是感情好猜敢,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布姑荷。 她就那樣靜靜地躺著,像睡著了一般缩擂。 火紅的嫁衣襯著肌膚如雪鼠冕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天胯盯,我揣著相機與錄音懈费,去河邊找鬼。 笑死博脑,一個胖子當著我的面吹牛憎乙,可吹牛的內容都是我干的。 我是一名探鬼主播叉趣,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼泞边,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了疗杉?” 一聲冷哼從身側響起阵谚,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后梢什,有當地人在樹林里發(fā)現了一具尸體奠蹬,經...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年嗡午,在試婚紗的時候發(fā)現自己被綠了囤躁。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡荔睹,死狀恐怖割以,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情应媚,我是刑警寧澤严沥,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站中姜,受9級特大地震影響消玄,放射性物質發(fā)生泄漏。R本人自食惡果不足惜丢胚,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一翩瓜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧携龟,春花似錦兔跌、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蕊蝗,卻和暖如春仅乓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蓬戚。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工夸楣, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人子漩。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓豫喧,卻偏偏與公主長得像,于是被迫代替她去往敵國和親幢泼。 傳聞我的和親對象是個殘疾皇子紧显,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內容

  • 在我們使用任何程序語言編程時,需要使用各種數據類型來存儲不同的信息旭绒。 變量的數據類型決定了如何將代表這些值的位存儲...
    零度_不結冰閱讀 149評論 0 0
  • 不論在使用什么程序語言編程時鸟妙,都是需要使用各種數據類型來存儲不同的信息焦人。變量的數據類型決定了如何將代表這些值的位存...
    奔跑的_猿閱讀 211評論 0 1
  • 在我們使用任何程序語言編程時,需要使用各種數據類型來存儲不同的信息重父。變量的數據類型決定了如何將代表這些值的位存儲到...
    kled_net閱讀 126評論 0 0
  • 1 Int 整型房午、整數 整型(Int)指的是沒有小數點的數字矿辽,可以有符號 (正、負郭厌、零)或是無符號 (正袋倔、零)。 ...
    LK_EX閱讀 1,119評論 0 0
  • Swift是一門開元的編程語言折柠,該語言用于開發(fā)OS X和iOS應用程序宾娜。 工欲善其事必先利其器,在開發(fā)之前扇售,我們需...
    Albert_Li99閱讀 874評論 0 2