mutating關(guān)鍵字

如果在類中使用mutating關(guān)鍵字鲫趁,編譯器會(huì)報(bào)錯(cuò)'mutating' isn't valid on methods in classes or class-bound protocols

因?yàn)轭愂且妙愋痛菏伲Y(jié)構(gòu)體和枚舉是值類型,在值類型的實(shí)例方法中,值類型的屬性默認(rèn)是不可以被修改的夺克。為了修改值類型的屬性值砰蠢,需要在它的實(shí)例方法上使用mutating關(guān)鍵字。

struct LSStack {
    private var items = [Int]()

    mutating func push(item: Int) {
        items.append(item) 
    }
}

var s = LSStack()
s.push(item: 1)

上面是一個(gè)簡(jiǎn)單的棧的例子,需要改變值類型LSStack中屬性items的值,則需要在push方法前添加mutating關(guān)鍵字。

// LSStack.push(item:)
sil hidden @$s4main7LSStackV4push4itemySi_tF : $@convention(method) (Int, @inout LSStack) -> () {
// %0 "item"                                      // users: %5, %2
// %1 "self"                                      // users: %6, %3
bb0(%0 : $Int, %1 : $*LSStack):
  debug_value %0 : $Int, let, name "item", argno 1 // id: %2
  debug_value_addr %1 : $*LSStack, var, name "self", argno 2 // id: %3
  %4 = alloc_stack $Int                           // users: %5, %11, %9
  store %0 to %4 : $*Int                          // id: %5
  %6 = begin_access [modify] [static] %1 : $*LSStack // users: %10, %7
  %7 = struct_element_addr %6 : $*LSStack, #LSStack.items // user: %9
  // function_ref Array.append(_:)
  %8 = function_ref @$sSa6appendyyxnF : $@convention(method) <τ_0_0> (@in τ_0_0, @inout Array<τ_0_0>) -> () // user: %9
  %9 = apply %8<Int>(%4, %7) : $@convention(method) <τ_0_0> (@in τ_0_0, @inout Array<τ_0_0>) -> ()
  end_access %6 : $*LSStack                       // id: %10
  dealloc_stack %4 : $*Int                        // id: %11
  %12 = tuple ()                                  // user: %13
  return %12 : $()                                // id: %13
} // end sil function '$s4main7LSStackV4push4itemySi_tF'

將上述代碼轉(zhuǎn)為sil發(fā)現(xiàn)商蕴,push參數(shù)中除了第一個(gè)顯示的Int類型參數(shù),還有一個(gè)使用@inout修飾的LSStack悲敷,通過(guò)結(jié)構(gòu)體元素地址進(jìn)行修改究恤。

func swap( a: inout Int, b: inout Int) {
    let temp : Int = a
    a = b
    b = temp
}

var a:Int = 10
var b:Int = 20

swap(&a, &b)

print(a)
print(b)

函數(shù)參數(shù)默認(rèn)是不可變,如果想要修改函數(shù)參數(shù)則需要使用inout進(jìn)行修飾后德,同時(shí)傳參時(shí)需要傳入地址

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末部宿,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌理张,老刑警劉巖赫蛇,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異雾叭,居然都是意外死亡悟耘,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門织狐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)暂幼,“玉大人,你說(shuō)我怎么就攤上這事移迫⊥遥” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵厨埋,是天一觀的道長(zhǎng)邪媳。 經(jīng)常有香客問(wèn)我,道長(zhǎng)荡陷,這世上最難降的妖魔是什么雨效? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮废赞,結(jié)果婚禮上徽龟,老公的妹妹穿的比我還像新娘。我一直安慰自己唉地,他們只是感情好顿肺,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著渣蜗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪旷祸。 梳的紋絲不亂的頭發(fā)上耕拷,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音托享,去河邊找鬼骚烧。 笑死,一個(gè)胖子當(dāng)著我的面吹牛闰围,可吹牛的內(nèi)容都是我干的赃绊。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼羡榴,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼碧查!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤忠售,失蹤者是張志新(化名)和其女友劉穎传惠,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體稻扬,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡卦方,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了泰佳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盼砍。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖浇坐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情汽绢,我是刑警寧澤吗跋,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站宁昭,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏积仗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一哎迄、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧渺氧,春花似錦、人聲如沸侣背。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至潮太,卻和暖如春管搪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工抛蚤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留台谢,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓岁经,卻偏偏與公主長(zhǎng)得像朋沮,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子缀壤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

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