Xcode15 擺脫closure裡[weak self]解包後的self

更新 發佈閱讀 2 分鐘

Xcode15的 @escaping closure裡解包後的[weak self]不必再寫 self了!!(好繞口)

用一個範例class Test來實驗,裡面只有一個變數a跟一個testClosure回"test",再用callTestClosure把變數a改成"test"

Xcode15的編譯

Xcode15的編譯

編譯正常!變數a成功被改成test

Xcode15的結果

Xcode15的結果

Xcode14的場合

同一份code拿到14去編譯,發生錯誤

Reference to property 'a' in closure requires explicit use of 'self' to make capture semantics explicit

在closure裡用到self的東西,一定要標self.XXX

Xcode14的編譯

Xcode14的編譯

為何會有這樣的差別?

Xcode14/15差在哪?而且一般來說,我們在closure裡寫[weak self],再用self?.a或解包後的self.a是為了避免循環引用。如果Xcode15不必特別寫明self,那他會指向誰?是closure的[weak self]還是外面class的self?🤔

為此特別去搜尋了官方的文件,解答在此!Swift 5.8官方新增了一個改動

Allow implicit self for weak self captures, after self is unwrapped

Proposed solution

We should permit implicit self for weak self captures, once self has been unwrapped.

This code would now be allowed to compile:

class ViewController {
let button: Button

func setup() {
button.tapHandler = { [weak self] in
guard let self else { return }
dismiss()
}
}

func dismiss() { ... }
}


要Swift5.8以後才能用(Xcode14↔Swift5.7、Xcode15↔Swift5.9)
解包後的self指的是weak self,以後使用Xcode15解包後的self可以放心大膽的省略了🥰





留言
avatar-img
Michelle Chen的沙龍
9會員
34內容數
紀錄iOS開發上遇到的問題或是一些流程筆記。主要都是Swift。
Michelle Chen的沙龍的其他內容
2024/09/06
本文介紹了使用KeyboardLayoutGuide的方法,以及在不同iOS版本和設備上遇到的佈局問題。透過調整TextView的底部對齊方式,成功解決了在模擬器和真實設備上出現的錯誤,提供了有用的建議給開發者。本文還探討了為何在iOS15與Xib的組合使用中會出現問題,以及解決方案。
Thumbnail
2024/09/06
本文介紹了使用KeyboardLayoutGuide的方法,以及在不同iOS版本和設備上遇到的佈局問題。透過調整TextView的底部對齊方式,成功解決了在模擬器和真實設備上出現的錯誤,提供了有用的建議給開發者。本文還探討了為何在iOS15與Xib的組合使用中會出現問題,以及解決方案。
Thumbnail
2024/08/07
使用者回報的超級奇怪線上問題,用數字鍵盤(NumberPad)更改欄位時,送出後尾數都會消失。例如:30 ⭢ 3,52 ⭢ 5。 尋尋覓覓了兩天終於被我找到這篇,apple的奇葩的bug 重現條件 iOS17 手機設定是繁體中文語系 前一個用過的鍵盤是Cangjie倉頡 or Suchen
2024/08/07
使用者回報的超級奇怪線上問題,用數字鍵盤(NumberPad)更改欄位時,送出後尾數都會消失。例如:30 ⭢ 3,52 ⭢ 5。 尋尋覓覓了兩天終於被我找到這篇,apple的奇葩的bug 重現條件 iOS17 手機設定是繁體中文語系 前一個用過的鍵盤是Cangjie倉頡 or Suchen
2024/07/03
這篇文章探討瞭如何在iOS應用程式中客製化Alert,包括改變字體大小、內嵌連結以及讓Alert的高度隨著字數增長並提供scroll操作。同時使用SwiftUI進行客製化,並介紹瞭解決高度超出範圍後文字捲動與scrollView固定高度的方法。
Thumbnail
2024/07/03
這篇文章探討瞭如何在iOS應用程式中客製化Alert,包括改變字體大小、內嵌連結以及讓Alert的高度隨著字數增長並提供scroll操作。同時使用SwiftUI進行客製化,並介紹瞭解決高度超出範圍後文字捲動與scrollView固定高度的方法。
Thumbnail
看更多
你可能也想看
Thumbnail
Xcode15的 @escaping closure裡解包後的[weak self]不必再寫 self了!! 用一個範例class Test來實驗,裡面只有一個變數a跟一個testClosure回"test",再用callTestClosure把變數a改成"test" 編譯正常!變數a成功被改成
Thumbnail
Xcode15的 @escaping closure裡解包後的[weak self]不必再寫 self了!! 用一個範例class Test來實驗,裡面只有一個變數a跟一個testClosure回"test",再用callTestClosure把變數a改成"test" 編譯正常!變數a成功被改成
Thumbnail
swift讀書筆記 Documentation Edit descriptiondocs.swift.org objective-c 的init 會return value,swift 不會。 所有的property都必須在Init()裡面設定初始值,或設定stored property,這種
Thumbnail
swift讀書筆記 Documentation Edit descriptiondocs.swift.org objective-c 的init 會return value,swift 不會。 所有的property都必須在Init()裡面設定初始值,或設定stored property,這種
Thumbnail
《練習2》生平大小事清單 這章談到放棄其實有資源的, 老師一路放棄很多事, 看似放棄, 其實另開闢一條路。 薩提爾女士說:「當我們試圖隱藏自認為不好的部分,就減低了成長的可能。」 我在書寫這份清單時, 我覺得根本快變成自傳啦! 因為我分不同階段來寫, 老師說不用按照
Thumbnail
《練習2》生平大小事清單 這章談到放棄其實有資源的, 老師一路放棄很多事, 看似放棄, 其實另開闢一條路。 薩提爾女士說:「當我們試圖隱藏自認為不好的部分,就減低了成長的可能。」 我在書寫這份清單時, 我覺得根本快變成自傳啦! 因為我分不同階段來寫, 老師說不用按照
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
Immutable interface 讓封裝更有彈性,不用擔心 setter 的過度開放。當不希望物件被不允許的對象修改時,只需讓對方取得 getter 的介面即可,反之,讓能夠允許修改的對象取得有 setter 的物件即可。
Thumbnail
Immutable interface 讓封裝更有彈性,不用擔心 setter 的過度開放。當不希望物件被不允許的對象修改時,只需讓對方取得 getter 的介面即可,反之,讓能夠允許修改的對象取得有 setter 的物件即可。
Thumbnail
再次回想起那段記憶,你知道你已足夠強壯去度過它 為什麼有時候在描述自己經歷的事件時,我們不用「我」,而是用「你」來描述?這個「你」指的是誰? 記得小時候寫作文,老師總說不要使用「你」,會造成語氣太過強烈,好像在質疑、針對讀者。 是,也不是。要看是在什麼語境下使用。 「你」的指涉對象其實有很多,可以簡
Thumbnail
再次回想起那段記憶,你知道你已足夠強壯去度過它 為什麼有時候在描述自己經歷的事件時,我們不用「我」,而是用「你」來描述?這個「你」指的是誰? 記得小時候寫作文,老師總說不要使用「你」,會造成語氣太過強烈,好像在質疑、針對讀者。 是,也不是。要看是在什麼語境下使用。 「你」的指涉對象其實有很多,可以簡
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
「允許自己逃避、允許自己沒有喜歡所有的事情、允許自己求救、允許自己悲傷、允許自己做自己。」 // 長大的路上我一直在練習,練習明白「沒有一個人有辦法滿足所有人的期待,但至少我們可以接納自己的真實、弄明白對自我的期待」。
Thumbnail
「允許自己逃避、允許自己沒有喜歡所有的事情、允許自己求救、允許自己悲傷、允許自己做自己。」 // 長大的路上我一直在練習,練習明白「沒有一個人有辦法滿足所有人的期待,但至少我們可以接納自己的真實、弄明白對自我的期待」。
Thumbnail
自我修正,與推翻自我 面臨到的最大挑戰 在我身上的體驗 往往,是源自於「自我定義」本身 就是說,將“我”這個東西 以「怎樣的形式」“如何”去 附著在什麼事物上 就是說,用什麼東西來定義自我 「我」是什麼東西 慢 直接用我慢去看待自我問題 直接用禪宗 「我執」“我慢”的角度,去切入問題 是最接近核心的
Thumbnail
自我修正,與推翻自我 面臨到的最大挑戰 在我身上的體驗 往往,是源自於「自我定義」本身 就是說,將“我”這個東西 以「怎樣的形式」“如何”去 附著在什麼事物上 就是說,用什麼東西來定義自我 「我」是什麼東西 慢 直接用我慢去看待自我問題 直接用禪宗 「我執」“我慢”的角度,去切入問題 是最接近核心的
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
在類別一節中,我們可以用Student類別的實體來存取類別中的name變數、score字典、以及其中的所有方法,這些可以被類別以外的程式碼所直接存取的屬性稱為公有屬性(public attribute)、可以被類別以外的程式碼所直接呼叫的方法稱為公有方法(public method)。
Thumbnail
在類別一節中,我們可以用Student類別的實體來存取類別中的name變數、score字典、以及其中的所有方法,這些可以被類別以外的程式碼所直接存取的屬性稱為公有屬性(public attribute)、可以被類別以外的程式碼所直接呼叫的方法稱為公有方法(public method)。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News