国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

Swift3.0 mutating關(guān)鍵字

2019-11-14 10:51:06
字體:
供稿:網(wǎng)友

在Swift中,包含三種類型(type):structureenumerationclass

其中structure和enumeration是值類型(value type), class是引用類型(reference type)

但是與Objective-C不同的是,structure和enumeration也可以擁有方法(method),其中方法可以為實例方法(instance method),也可以為類方法(type method),實例方法是和類型的一個實例綁定的。

在Swift官方教程中有這樣一句話:

“Structures and enumerations are value types. By default, the PRoperties of a value type cannot be modified from within its instance methods.” 

摘錄來自: Apple Inc. “The Swift Programming Language”。 iBooks. https://itunes.apple.com/WebObjects/MZStore.woa/wa/viewBook?id=881256329

大致意思就是說,雖然結(jié)構(gòu)體和枚舉可以定義自己的方法,但是默認(rèn)情況下,實例方法中是不可以修改值類型的屬性。

舉個簡單的例子,假如定義一個點結(jié)構(gòu)體,該結(jié)構(gòu)體有一個修改點位置的實例方法:(編譯器會報錯)

struct Point {    var x = 0, y = 0    func moveXBy(x: Int, y: Int) {        self.x += x // Cannot invoke '+=' with an argument list of type '(Int, Int)'        self.y += y // Cannot invoke '+=' with an argument list of type '(Int, Int)'    }}

編譯器拋出錯誤,說明確實不能在實例方法中修改屬性值,而且提示你要加mutating關(guān)鍵字。

為了能夠在實例方法中修改屬性值,可以在方法定義前添加關(guān)鍵字mutating,修改后的代碼:

struct Point {    var x = 0, y = 0    mutating func moveXBy(x: Int, y: Int) {        self.x += x        self.y += y    }}

另外,在值類型的實例方法中,也可以直接修改self屬性值。

enum TriStateSwitch {    case Off, Low, High    mutating func next() {        switch self {        case .Off:            self = .Low        case .Low:            self = .High        case .High:            self = .Off        }    }}var ovenLight = TriStateSwitch.LowovenLight.next() // ovenLight is now equal to .High ovenLight.next() // ovenLight is now equal to .Off”

TriStateSwitch枚舉定義了一個三個狀態(tài)的開關(guān),在next實例方法中動態(tài)改變self屬性的值。

當(dāng)然,在引用類型中(即class)中的方法默認(rèn)情況下就可以修改屬性值,不存在以上問題。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 松溪县| 武夷山市| 兴化市| 卓尼县| 师宗县| 安龙县| 阿城市| 小金县| 读书| 徐汇区| 绥德县| 同仁县| 石嘴山市| 廊坊市| 西城区| 马公市| 彰化市| 河津市| 凤庆县| 杨浦区| 凤山县| 东乡| 汝城县| 卢龙县| 开平市| 西盟| 大荔县| 玛曲县| 兴仁县| 石台县| 卓资县| 神农架林区| 韶山市| 巧家县| 囊谦县| 大足县| 太仆寺旗| 什邡市| 特克斯县| 宜阳县| 会理县|