Swift基礎(chǔ)知識(shí)補(bǔ)充(一)

??1、數(shù)據(jù)類型

??在Swift數(shù)據(jù)類型主要分為值類型引用類型穷绵。其中,整型(Int)特愿、浮點(diǎn)型(Float)仲墨、布爾型(Bool)、字符(Character)揍障、字符串(String)宗收、元組、集合(Array亚兄、Dictionary和Set)、枚舉(enum)和結(jié)構(gòu)體(struct)均屬于值類型采驻;而類(class)是引用類型审胚。值類型在傳遞或者賦值的過程中先創(chuàng)建一個(gè)副本匈勋,然后再把副本傳遞或者賦值過去,在函數(shù)調(diào)用的過程中不會(huì)影響原始數(shù)據(jù)膳叨。引用類型會(huì)把數(shù)據(jù)本身的引用(指針)賦值或者傳遞過去洽洁,在函數(shù)調(diào)用過程中會(huì)影響原始數(shù)據(jù)

??2菲嘴、let和var

??關(guān)于let和var饿自,通常情況下優(yōu)先使用let,如果確實(shí)要修改變量的值龄坪,才考慮使用var昭雌。引用類型在聲明的時(shí)候也經(jīng)常使用let,這樣做的主要目的是防止程序在運(yùn)行過程中被錯(cuò)誤的修改健田,使用let可以極大的提高程序的安全性烛卧。當(dāng)引用類型使用let時(shí),不能改變其引用(也就是指針)妓局,但是可以修改其引用的內(nèi)容:

let greenView: UIView = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
// 可以修改greenView里面的內(nèi)容
greenView.backgroundColor = .green  // 修改greenView的背景顏色

// 但是不能修改greenView的引用
greenView = UIView()  // 不能再讓它指向另外一個(gè)完全不同的實(shí)例

??3总放、浮點(diǎn)數(shù)的取余運(yùn)算

??在Swift 3之后,取余運(yùn)算符不能用于浮點(diǎn)數(shù)的計(jì)算好爬,只用使用truncatingRemainder(dividingBy: )函數(shù)來代替:

// 整數(shù)取余運(yùn)算
let a = 10 % 7  // 結(jié)果為3

// 浮點(diǎn)數(shù)用%取余運(yùn)算會(huì)報(bào)錯(cuò)
let b = 10.0 % 7.0

// 只能使用truncatingRemainder(dividingBy: )函數(shù)
var doubleA = 9.0
doubleA = doubleA + 8
doubleA = doubleA.truncatingRemainder(dividingBy: 7)  // 結(jié)果為3.0

??4局雄、恒等于(===)

??只有引用類型才能使用===或者!==進(jìn)行比較,值類型是不能使用它們進(jìn)行比較存炮。比如手炬搭,字符串String類型不能使用恒等于進(jìn)行比較,但是UIView實(shí)例對象可以:

let str1 = "LeBron James"
let str2 = "Dwyane Wade"
if str1 == str2 {
    print("true")
} else {
    print("false")
}  // 輸出false

// 值類型不能進(jìn)行恒等于比較僵蛛,編譯報(bào)錯(cuò)
let arr1 = [1, 3, 5]
let arr2 = [2, 4, 6]
if arr1 === arr2 {
    print("true")
} else {
    print("false")
}  // 直接報(bào)錯(cuò)

// 引用類型可以進(jìn)行恒等于比較
let greenView = UIView(frame: CGRect(x: 0, y: 0, width: 50, height: 50))
greenView.backgroundColor = .green
let redView = UIView(frame: CGRect(x: 0, y: 0, width: 50, height: 50))
redView.backgroundColor = .red

if greenView === redView {
    print("greenView === redView")
} else {
    print("greenView !== redView")
}  // 輸出greenView !== redView

??5尚蝌、位運(yùn)算符

??位運(yùn)算是以二進(jìn)制的形式進(jìn)行的,其操作數(shù)和結(jié)果均為整型充尉。位運(yùn)算在iOS開發(fā)中我們見得最多的可能就是位移枚舉:

位移枚舉示例.png

??聲明兩個(gè)用二進(jìn)制形式表示的變量a和b飘言,其中0b是二進(jìn)制的前綴,對它們進(jìn)行相應(yīng)的位運(yùn)算結(jié)果如下:

let a: UInt8 = 0b110010  // 50
let b: UInt8 = 0b1100100  // 100

// 按位取反運(yùn)算
print("~a = \(~a), ~b = \(~b)")  // ~a = 205, ~b = 155

// 按位或運(yùn)算
print("a | b = \(a | b)")  // a | b = 118

// 按位與運(yùn)算
print("a & b = \(a & b)")  // a & b = 32

// 按位異或運(yùn)算
print("a ^ b = \(a ^ b)")  // a ^ b = 86

// 左移和右移運(yùn)算
print("a >> 2 = \(a >> 2)")  // a >> 2 = 12
print("b >> 2 = \(b >> 2)")  // b >> 2 = 25
print("a << 2 = \(a << 2)")  // a << 2 = 200
print("b << 2 = \(b << 2)")  // b << 2 = 144

??可以自己畫小圖圖進(jìn)行手動(dòng)計(jì)算驼侠。具體的運(yùn)算法則如下:

按位與:&
    只有對應(yīng)的兩個(gè)二進(jìn)位都為1時(shí)姿鸿,其結(jié)果才為1,否則為0倒源;


按位或:|
    只要對應(yīng)的兩個(gè)二進(jìn)位有一位為1時(shí)苛预,其結(jié)果就為1,否則為0


按位異或:^
    當(dāng)對應(yīng)的二進(jìn)位不相同時(shí)笋熬,其結(jié)果就為1热某,否則為0

按位異或的補(bǔ)充:
    1.相同數(shù)值進(jìn)行異或,其結(jié)果為0;
    2.多個(gè)數(shù)值進(jìn)行異或運(yùn)算時(shí)昔馋,其位置可以交換筹吐;
    3.任何數(shù)值跟0進(jìn)行異或運(yùn)算,其結(jié)果還是原來的數(shù)值秘遏。


按位取反:~(單目運(yùn)算符)


左移運(yùn)算符:<<
    1.把整數(shù)a的各二進(jìn)位全部左移n位丘薛,高位丟棄,低位補(bǔ)0邦危。左移n位其實(shí)就是乘以2的n次方洋侨;
    2.由于左移是丟棄最高位,所以符號(hào)位也會(huì)被丟棄倦蚪,因此左移出來的結(jié)果可能會(huì)改變數(shù)值的正負(fù)性希坚。


右移運(yùn)算符:>>
    1.把整數(shù)a的各二進(jìn)位全部右移n位,保持符號(hào)位不變审丘。右移n位其實(shí)就是除以2的n次方吏够;
    2.為正數(shù)時(shí),符號(hào)位為0滩报,最高位補(bǔ)0锅知;
    3.為負(fù)數(shù)時(shí),符號(hào)位為1脓钾,最高位補(bǔ)0或補(bǔ)1售睹,這取決于編譯系統(tǒng)的規(guī)定。

??6可训、數(shù)字表示方式

??在為一個(gè)整型進(jìn)行賦值時(shí)昌妹,可以使用二進(jìn)制、八進(jìn)制和十六進(jìn)制握截,表示方式分別為:

二進(jìn)制:以0b作為前綴(即數(shù)字0和字母b)飞崖;
八進(jìn)制:以0o作為前綴(即數(shù)字0和字母o);
十六進(jìn)制:以0x作為前綴(即數(shù)字0和字母x)谨胞。

??除了整型之外固歪,在進(jìn)行數(shù)學(xué)計(jì)算時(shí),可能需要用到科學(xué)計(jì)算胯努。如果采用十進(jìn)制的指數(shù)表示牢裳,需要用到大寫的字母E或小寫的字母e;如果采用十六進(jìn)制的指數(shù)表示叶沛,需要用到大寫字母P或小寫字母p蒲讯。以十進(jìn)制的指數(shù)計(jì)算為例:

let a = 4e2  // 即4乘以10的2次方

??有時(shí)候?yàn)榱朔奖汩喿x,可以在整數(shù)或者浮點(diǎn)數(shù)中添加0或者下劃線灰署,這兩種做法均不會(huì)影響實(shí)際的結(jié)果:

let a = 001.414  // 1.414
let b = 100_000_000  // 小目標(biāo)

??7判帮、可選類型

??與Objective-C不同局嘁,Swift中所有的數(shù)據(jù)類型在聲明時(shí)都不能為空值(nil),必須給它賦一個(gè)明確的值脊另。但是导狡,在實(shí)際開發(fā)時(shí),難免碰到要賦空值的情況偎痛,為了解決這個(gè)問題,Swift中提供了可選類型独郎〔嚷螅可選類型的語法是在某個(gè)數(shù)據(jù)類型后面加上問好(?)或者感嘆號(hào)(!):

var a: Int = 10
a = nil  // 編譯報(bào)錯(cuò)
let str: String = nil  // 編譯報(bào)錯(cuò)

let str: String! = nil  // 可選類型
var arr: [Float]?  // 可選類型

??使用可選類型聲明的變量在使用時(shí)需要解包。解包可分為顯式解包和隱式解包氓癌。使用問號(hào)聲明的變量在使用時(shí)谓谦,需要用!進(jìn)行解包贪婉,這稱之為顯式解包反粥;而使用感嘆號(hào)聲明的變量在使用時(shí),可以不用疲迂!進(jìn)行解包才顿,這稱之為隱式隱式解包。通常情況下尤蒿,解包操作是比較危險(xiǎn)的郑气,應(yīng)該慎用。好的做法是用可選綁定腰池。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末尾组,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子示弓,更是在濱河造成了極大的恐慌讳侨,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奏属,死亡現(xiàn)場離奇詭異跨跨,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)拍皮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進(jìn)店門歹叮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人铆帽,你說我怎么就攤上這事咆耿。” “怎么了爹橱?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵萨螺,是天一觀的道長。 經(jīng)常有香客問我,道長慰技,這世上最難降的妖魔是什么椭盏? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮吻商,結(jié)果婚禮上掏颊,老公的妹妹穿的比我還像新娘。我一直安慰自己艾帐,他們只是感情好乌叶,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著柒爸,像睡著了一般准浴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上捎稚,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天乐横,我揣著相機(jī)與錄音,去河邊找鬼今野。 笑死葡公,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的腥泥。 我是一名探鬼主播匾南,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蛔外!你這毒婦竟也來了蛆楞?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤夹厌,失蹤者是張志新(化名)和其女友劉穎豹爹,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體矛纹,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡臂聋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了或南。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片孩等。...
    茶點(diǎn)故事閱讀 40,503評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖采够,靈堂內(nèi)的尸體忽然破棺而出肄方,到底是詐尸還是另有隱情,我是刑警寧澤蹬癌,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布权她,位于F島的核電站虹茶,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏隅要。R本人自食惡果不足惜蝴罪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望步清。 院中可真熱鬧要门,春花似錦、人聲如沸尼啡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽崖瞭。三九已至,卻和暖如春撑毛,著一層夾襖步出監(jiān)牢的瞬間书聚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工藻雌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留雌续,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓胯杭,卻偏偏與公主長得像驯杜,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子做个,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評論 2 359

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