Swift:概念解釋

持續(xù)更新中...

github:Swift基礎(chǔ)實(shí)例
github:SwiftBasicTableView

type methods

被特定類(lèi)型的實(shí)例 instance 調(diào)用的方法叫實(shí)例方法 instance methods钳枕,類(lèi)似于 OC 的對(duì)象方法(減號(hào)方法)。而被類(lèi)型自己調(diào)用的方法叫做類(lèi)型方法 type methods竹观,類(lèi)似 OC 的類(lèi)方法(加號(hào)方法)肌幽。你可以在方法關(guān)鍵字 func 前加上關(guān)鍵字 static 來(lái)表示這些方法是 type methods吸申。在類(lèi)中(Classes)胖齐,也可以在func前加 class 關(guān)鍵字表示允許他的子類(lèi)繼承父類(lèi)的這個(gè)方法的實(shí)現(xiàn)肠套。

value type

某一個(gè)類(lèi)型的值根竿,當(dāng)它被分配給某個(gè)變量(variable)或者常量(constant)陵像,或者被傳遞給一個(gè)函數(shù)時(shí),它的值是被拷貝的(可以打印它們的內(nèi)存地址進(jìn)行比較)寇壳,那么這種類(lèi)型稱(chēng)為值類(lèi)型value type醒颖。在 Swift 中,所有的基本類(lèi)型都是都是 value type壳炎,比如 integers, floating-point numbers, Booleans, strings, arrays and dictionaries泞歉,structuresenumerations

memberwise initializer

結(jié)構(gòu)體類(lèi)型(structure)如果它 沒(méi)有 自定義一個(gè)自己的構(gòu)造器的話(huà)匿辩,會(huì)自動(dòng)接收一個(gè)成員構(gòu)造器memberwise initializer腰耙。和默認(rèn)構(gòu)造器不同,在存儲(chǔ)屬性沒(méi)有被設(shè)置默認(rèn)值的情況下铲球,結(jié)構(gòu)體依然接收一個(gè)memberwise initializer挺庞。因此,memberwise initializer是初始化結(jié)構(gòu)體對(duì)象的成員屬性的捷徑:

struct SomeSize {
    //var width = 0.0, height = 0.0
    var width :Double?
    var height:Double?
}
// 不管width和height是否被初始化,SomeSize都會(huì)自動(dòng)接收一個(gè)帶有兩個(gè)參數(shù)width和height的成員構(gòu)造器
SomeSize()     //默認(rèn)構(gòu)造器
let someSize = SomeSize(width: 3.0, height: 2.0)
Inout Parameter

一般的稼病,函數(shù)中的變量參數(shù)(variable parameters)选侨,只能在函數(shù)體里進(jìn)行修改。如果你想把這種修改持久化溯饵,就是在函數(shù)調(diào)用之后侵俗,對(duì)變量參數(shù)的修改,也會(huì)影響到函數(shù)外被傳進(jìn)來(lái)的變量丰刊。你需要把這個(gè)參數(shù)定義為in-out parameter:在參數(shù)名前面加上關(guān)鍵字 inoutin-out parameter 的含義就是有一個(gè)值被傳進(jìn)(in)函數(shù)增拥,被函數(shù)修改之后啄巧,又返回出去(out)寻歧,并替換原來(lái)的值。一個(gè)變量被當(dāng)做參數(shù)傳進(jìn)函數(shù)時(shí)秩仆,可以在變量名前加上&码泛,表示這個(gè)變量可以被函數(shù)改變:

func swapTwoInts(inout a:Int, inout _ b:Int) {
    let tempInt = a
    a = b
    b = tempInt
}
var someInt = 3,someIntTwo = 5
swapTwoInts(&someInt, &someIntTwo)
print(someIntTwo) // 3
  • 把兩個(gè)值 someIntsomeIntTwo 互換
Failable initializer

當(dāng)初始化一個(gè)類(lèi)(class),結(jié)構(gòu)體(structure)或者枚舉(enumeration)的時(shí)候澄耍,可以允許初始化失敗噪珊,這個(gè)失敗可能是由于某些參數(shù)不合法,或者某些參數(shù)的缺失齐莲,或者其他的一些情況導(dǎo)致的痢站。這個(gè)允許失敗的構(gòu)造器稱(chēng)為可失敗構(gòu)造器 failable initializer,在關(guān)鍵字 init 后面加上問(wèn)號(hào)选酗,來(lái)表示這個(gè)構(gòu)造器 init?阵难。
比如,給某個(gè)菜添加信息時(shí)芒填,要求呜叫,有三個(gè)屬性:名稱(chēng)name:String,評(píng)分rating:Int和圖片photo:UIImage,其中殿衰,name rating不為空且rating > 0朱庆, photo可以為空,我們用模型 Meal 來(lái)存儲(chǔ)這些屬性闷祥,Mealfailable initializer 如下:

init?(name: String, photo: UIImage?, rating: Int) {
        
        self.name   = name
        self.photo  = photo
        self.rating = rating
        
        if name.isEmpty || rating < 0 {
            
            return nil
        }
    }
  • 當(dāng) name 為空椎工,或者 rating < 0 時(shí),就會(huì)初始化失敗蜀踏,此時(shí)可以返回 nil
Downcasting

類(lèi)似于類(lèi)型轉(zhuǎn)換维蒙。通常,某個(gè)確定的類(lèi)果覆,其類(lèi)型的常量或變量颅痊,會(huì)引用場(chǎng)景(scene)背后的一個(gè)子類(lèi)(比如類(lèi)A)的實(shí)例,這樣局待,你可以把這個(gè)常量或變量向下轉(zhuǎn)換(downcast)為子類(lèi)類(lèi)型A斑响。可以用操作符 as! or as?钳榨。as! 是強(qiáng)制類(lèi)型轉(zhuǎn)換舰罚,只有當(dāng)你非常確定這樣做可以成功時(shí),才可以使用薛耻,否則营罢,不成功會(huì)引起 crashas? 如果轉(zhuǎn)換不成功,則會(huì)返回 nil饲漾。所以當(dāng)你不確定向下轉(zhuǎn)換是否能成功時(shí)蝙搔,使用as?。比如考传,從相冊(cè)選擇一個(gè)圖片時(shí)吃型,可以這樣得到類(lèi)型為 UIImage 的圖片對(duì)象:

let selectedImage = info[UIImagePickerControllerOriginalImage] as! UIImage
Reference Types

ClassClosurereference types。和 value types 不同僚楞,reference types 并不是被拷貝的勤晚,而是通過(guò)一個(gè)引用來(lái)訪問(wèn)相同的實(shí)例,無(wú)論是他們被分配給一個(gè)變量或常量或者被傳遞給一個(gè)函數(shù)泉褐。我們假設(shè)類(lèi) VideoMode 有個(gè)屬性 frameRate: Float赐写,來(lái)查考引用

let tenMode = VideoMode()
tenMode.frameRate = 20.0
let alsoTenMode   = tenMode
alsoTenMode.frameRate = 30.0
print("The frameRate now is \(tenMode.frameRate)") // "The frameRate now is 30.0"

實(shí)例 tenMode 被分配給了另外一個(gè)實(shí)例 alsoTenMode,由于類(lèi)是reference types兴枯,因此血淌,這兩個(gè)實(shí)例都指向相同的 VideoMode instance.

Identical to(===) Not identical to(!==)

因?yàn)轭?lèi) class 是引用類(lèi)型,所以多個(gè)常量和變量就可以訪問(wèn) 場(chǎng)景(scene)后的同一個(gè)實(shí)例(類(lèi)的實(shí)例對(duì)象)财剖。那么悠夯,怎么分辨兩個(gè)實(shí)例或者變量引用的是同一個(gè)實(shí)例(類(lèi)的實(shí)例對(duì)象)呢?可以使用下面兩種操作符來(lái)區(qū)分:

  • Identical to (===)
  • Not identical to (!==)

我們可以比較上面的類(lèi) VideoMode 的兩個(gè)實(shí)例tenModealsoTenMode

if tenMode === alsoTenMode {
    print("tenMode and alsoTenMode refer to the same VideoMode instance.")
    // "tenMode and alsoTenMode refer to the same VideoMode instance."
}
Properties

關(guān)于 Strored Properties 躺坟、Lazy Stored Properties沦补、Compute Properties 請(qǐng)參考 Properties 這一章節(jié)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市咪橙,隨后出現(xiàn)的幾起案子夕膀,更是在濱河造成了極大的恐慌,老刑警劉巖美侦,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件产舞,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡菠剩,警方通過(guò)查閱死者的電腦和手機(jī)易猫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)具壮,“玉大人准颓,你說(shuō)我怎么就攤上這事」准耍” “怎么了攘已?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)怜跑。 經(jīng)常有香客問(wèn)我样勃,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任彤灶,我火速辦了婚禮看幼,結(jié)果婚禮上批旺,老公的妹妹穿的比我還像新娘幌陕。我一直安慰自己,他們只是感情好汽煮,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布搏熄。 她就那樣靜靜地躺著,像睡著了一般暇赤。 火紅的嫁衣襯著肌膚如雪心例。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,365評(píng)論 1 302
  • 那天鞋囊,我揣著相機(jī)與錄音止后,去河邊找鬼。 笑死溜腐,一個(gè)胖子當(dāng)著我的面吹牛译株,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播挺益,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼歉糜,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了望众?” 一聲冷哼從身側(cè)響起匪补,我...
    開(kāi)封第一講書(shū)人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎烂翰,沒(méi)想到半個(gè)月后夯缺,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡甘耿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年踊兜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片棵里。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡润文,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出殿怜,到底是詐尸還是另有隱情典蝌,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布头谜,位于F島的核電站骏掀,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜截驮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一笑陈、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧葵袭,春花似錦涵妥、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至鹉勒,卻和暖如春帆锋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背禽额。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工锯厢, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人脯倒。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓实辑,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親盔憨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子徙菠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

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