4. 更多類型

轉(zhuǎn)載自http://wanwu.tech/2017/03/05/types/
我們已經(jīng)學(xué)習(xí)了基本的數(shù)據(jù)類型及其使用方法,也知道了我們有什么運(yùn)算符可用搀暑。如同上一章的問題,我們知道了怎么表達(dá)有兩個(gè)蘋果跨琳,但是怎么表達(dá)我的名字叫小明呢自点?

這個(gè)時(shí)候,我們就涉及到了新的數(shù)據(jù)類型:字符串脉让。這一章桂敛,我們首先會(huì)介紹什么是數(shù)據(jù)類型,然后介紹更多數(shù)字相關(guān)知識(shí)和字符串溅潜。

數(shù)據(jù)類型

數(shù)據(jù)類型是一種屬性术唬,用于指定數(shù)據(jù)的種類,比如我們上一章介紹的整數(shù)滚澜、浮點(diǎn)數(shù)粗仓。一個(gè)數(shù)據(jù),有數(shù)據(jù)類型设捐,同時(shí)也有一個(gè)相應(yīng)的名稱和值(或者屬性)借浊。上一章中,下面的代碼創(chuàng)建了一個(gè)數(shù)據(jù)類型為Int挡育,名稱為numberApple巴碗,值為10的數(shù)據(jù)朴爬。

let numberApple: Int = 10

類似的即寒,下面的代碼創(chuàng)建了數(shù)據(jù)類型為Double,名稱為price召噩,值為5.2的數(shù)據(jù)母赵。

let price: Double = 5.2

類型推斷

現(xiàn)在,看一下我們的代碼

let numberApple: Int = 10
let price: Double = 5.2

如果我按下面這樣寫(不指明數(shù)據(jù)類型)具滴,你能猜出來兩個(gè)數(shù)據(jù)分別是什么數(shù)據(jù)類型嗎凹嘲?

let numberApple = 10
let price = 5.2

提示:根據(jù)等號(hào)右邊的數(shù)據(jù)有沒有小數(shù)點(diǎn)來判斷

相信大家都可以猜出來吧?Swift也能构韵!這個(gè)猜測(cè)的過程叫做類型推斷周蹭。

那么,我們?nèi)绻氪_定Swift的推斷是否符合我們的心意怎么辦呢疲恢?一個(gè)方法是點(diǎn)擊右上角面板控制器的

凶朗,使其成藍(lán)色激活狀態(tài),打開右邊框显拳。鼠標(biāo)點(diǎn)擊想要查看的變量或者常量的位置棚愤,右邊欄會(huì)出現(xiàn)其具體信息。或者也可以按住Option鍵宛畦,鼠標(biāo)點(diǎn)擊瘸洛,也可看到彈出框顯示具體信息。

那么什么時(shí)候可以使用類型推斷什么時(shí)候不行呢次和?一般來說你能猜出來反肋,Swift就能猜出來。你猜不出來踏施,Swift也難猜出來囚玫。

數(shù)據(jù)類型轉(zhuǎn)換

接下來,我們?nèi)绻雽?duì)價(jià)格(price)取整呢读规?可以這樣嗎?

let price: Double = 12.5
var priceInteger: Int = 0
priceInteger = age

我們的Playground會(huì)報(bào)錯(cuò):

Cannot assign value of type 'Double' to type 'Int'抓督。

并且會(huì)有修改建議:

Fix-it Replace "price" with "(Int)price"。

雙擊接受這條建議束亏,我們發(fā)現(xiàn)铃在,代碼變?yōu)榱耍?/p>

priceInteger = Int(price)    // => 12


以上發(fā)生了什么事情呢?開始的報(bào)錯(cuò)碍遍,因?yàn)镾wift不允許你將一個(gè)“Double”數(shù)據(jù)隱式(悄悄地定铜,不公開說明)地轉(zhuǎn)變?yōu)椤癐nt”。推薦的修改建議是說怕敬,你要顯式(公開)地說明揣炕,你想把“Double”轉(zhuǎn)變?yōu)椤癐nt”。


為什么呢东跪?我們的price值為5.2畸陡,那么它轉(zhuǎn)為“Int”后,小數(shù)怎么處理呢虽填?如果采用顯式轉(zhuǎn)換Int(age)丁恭,Swift如同得到了你的授權(quán),它將把小數(shù)直接忽略斋日。但是如果反過來牲览,“Int”轉(zhuǎn)為“Double”呢?

price = priceInteger

我們發(fā)現(xiàn)恶守,還是不行第献!,因?yàn)?strong>swift是一門強(qiáng)類型語言兔港,它不允許任何隱式的數(shù)據(jù)轉(zhuǎn)換庸毫。


所以上面代碼必須改為:

price = Double(priceInteger)

由以上兩個(gè)例子,我們可以總結(jié)出押框,如果進(jìn)行數(shù)據(jù)轉(zhuǎn)換的話岔绸,其形式應(yīng)該是:

目標(biāo)數(shù)據(jù)類型的數(shù)據(jù) = 目標(biāo)數(shù)據(jù)類型(待轉(zhuǎn)換數(shù)據(jù))

操作多種數(shù)據(jù)類型

我們已經(jīng)知道了蘋果的數(shù)量,如果我們?cè)僦捞O果的單價(jià),那么我們就可以計(jì)算出蘋果的總價(jià)了吧:

let numberApple: Int = 10
let price: Double = 5.2
let totalPrice: Double = numberApple * price

Playground中嘗試盒揉,你應(yīng)該會(huì)發(fā)現(xiàn)報(bào)錯(cuò):

Binary operator '*' cannot be applied to operands of type 'Double' and 'Int'

這是為什么呢晋被?因?yàn)?code>numberApple是“Int”數(shù)據(jù),而price是“Double"數(shù)據(jù)刚盈,不是一種類型羡洛。如果要計(jì)算,必須將他們轉(zhuǎn)變?yōu)橥环N數(shù)據(jù)類型藕漱。如果你想要結(jié)果為“Int”欲侮,那么就把price轉(zhuǎn)變?yōu)椤癐nt”再做計(jì)算。這里肋联,我們的totalPrice是“Double”威蕉,所以我們應(yīng)該將numberApple轉(zhuǎn)為“Double”:

let numberApple: Int = 10
let price: Double = 5.2
let totalPrice: Double = Double(numberApple) * price

小練習(xí)

將上面計(jì)算總價(jià)的代碼片段使用類型推斷重寫,并使用介紹的兩種方法查看其推斷類型橄仍。

字符串

在本章開始韧涨,我們要解決怎么表達(dá)我的名字叫小明的問題。這個(gè)時(shí)候侮繁,就輪到字符串String)數(shù)據(jù)類型出場(chǎng)了虑粥。

字符串定義

let name = "xiaoming"
let name2 = "小明"

上面的代碼定義了兩個(gè)名字,一個(gè)英文是“xiaoming”宪哩,另一個(gè)是中文的“小明”娩贷。等號(hào)左邊的部分叫做字符串字面值,使用雙引號(hào)括起來锁孟。

很明顯彬祖,上面的代碼我們靠類型推斷來判斷出以上兩個(gè)常量是字符串,那么如果我們想顯式聲明呢罗岖,我們可以這樣:

let name:String = "xiaoming"
let name2: String = "小明"

字符串操作

如果我們想要把名字分成“姓”和“名”分開存儲(chǔ)涧至,但是一起顯示,可以怎么做呢桑包,我們可以嘗試下面方法把兩個(gè)字符串用加號(hào)”+“加起來:

let firstName = "Meimei"
let lastName = "Han"
let fullName = firstName + lastName
print(fullName)

我們注意到這個(gè)方法是可行的,但是有一個(gè)人問題纺非,英文的“姓”和“名”需要中間有空格哑了,怎么辦呢?我們中間加一個(gè)空格試試:

let fullName = firstName + " " + lastName


現(xiàn)在我們通過print(fullName)方法來打印全名烧颖,但是如果我想表達(dá)更完整信息呢弱左,比如“我的名字叫某某,身高XXX”怎么辦炕淮?

let firstName = "Meimei"
let lastName = "Han"
let height: Double = 1.72
let fullName = firstName + " " + lastName
print("My name is " + firstName + " and my height is " + String(height))

上面代碼我們除了使用字符串相加拆火,還使用了類型轉(zhuǎn)換,將一個(gè)“Double”型常量轉(zhuǎn)為了“String”。

但是有一個(gè)問題们镜,你看雙引號(hào)看暈了嗎币叹?說實(shí)話,寫多了我已經(jīng)有點(diǎn)暈了模狭。那怎么辦呢颈抚?試試下面方法:

print("My name is \(firstName) and my height is \(height)")

這里,我們使用了字符串插值的方法嚼鹉,大大簡(jiǎn)化了代碼的書寫贩汉,提高了可讀性。值得注意的是锚赤,這里我們?cè)谧霾逯档臅r(shí)候匹舞,數(shù)字直接轉(zhuǎn)為了字符串。

總結(jié)

  1. 更過數(shù)字類型的操作
  2. 類型轉(zhuǎn)換
  3. 字符串基本操作

下一步

韓梅梅已經(jīng)是一個(gè)大美女了线脚,那么如果李雷還和她在一起策菜,他們應(yīng)該結(jié)婚了吧?(90酒贬,00后有興趣可以百度韓梅梅和李雷的故事又憨,我也想寫你們的故事,但是我不知道啊锭吨。蠢莺。。)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末零如,一起剝皮案震驚了整個(gè)濱河市躏将,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌考蕾,老刑警劉巖祸憋,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異肖卧,居然都是意外死亡蚯窥,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門塞帐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拦赠,“玉大人,你說我怎么就攤上這事葵姥『墒螅” “怎么了?”我有些...
    開封第一講書人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵榔幸,是天一觀的道長(zhǎng)允乐。 經(jīng)常有香客問我矮嫉,道長(zhǎng),這世上最難降的妖魔是什么牍疏? 我笑而不...
    開封第一講書人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任蠢笋,我火速辦了婚禮,結(jié)果婚禮上麸澜,老公的妹妹穿的比我還像新娘挺尿。我一直安慰自己,他們只是感情好炊邦,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開白布编矾。 她就那樣靜靜地躺著,像睡著了一般馁害。 火紅的嫁衣襯著肌膚如雪窄俏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評(píng)論 1 302
  • 那天碘菜,我揣著相機(jī)與錄音凹蜈,去河邊找鬼。 笑死忍啸,一個(gè)胖子當(dāng)著我的面吹牛仰坦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播计雌,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼悄晃,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了凿滤?” 一聲冷哼從身側(cè)響起妈橄,我...
    開封第一講書人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎翁脆,沒想到半個(gè)月后眷蚓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡反番,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年沙热,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恬口。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡校读,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出祖能,到底是詐尸還是另有隱情,我是刑警寧澤蛾洛,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布养铸,位于F島的核電站雁芙,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏钞螟。R本人自食惡果不足惜兔甘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鳞滨。 院中可真熱鬧洞焙,春花似錦、人聲如沸拯啦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽褒链。三九已至唁情,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間甫匹,已是汗流浹背甸鸟。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留兵迅,地道東北人抢韭。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像恍箭,于是被迫代替她去往敵國(guó)和親刻恭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 關(guān)于 Swift 重要這個(gè)文檔所包含的準(zhǔn)備信息, 是關(guān)于開發(fā)的 API 和技術(shù)的季惯。這個(gè)信息可能會(huì)改變, 根據(jù)這個(gè)文...
    無灃閱讀 4,301評(píng)論 1 27
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 3,805評(píng)論 1 10
  • 2014年的蘋果全球開發(fā)者大會(huì)(WWDC)吠各,當(dāng)Craig Federighi向全世界宣布“We have new ...
    yeshenlong520閱讀 2,294評(píng)論 0 9
  • 你住的城市下雨了贾漏,很想問你有沒有帶傘∨航睿可是我忍住了纵散,因?yàn)槲遗履阏f沒帶,而我又無能為力隐圾,就像是我愛你伍掀,卻給不到你想要...
    一支筆的陪伴閱讀 1,344評(píng)論 0 4
  • 男女之間做朋友真的挺好的,沒有理由去小心眼暇藏,去吃醋蜜笤。還能多一個(gè)彼此傾聽,談天的人盐碱。 可最近把兔,好多朋友都脫單了沪伙。弄得...
    司馬尋緣閱讀 218評(píng)論 0 0